1 module erupted.functions;
2 
3 public import erupted.types;
4 
5 extern( System ) @nogc nothrow {
6 
7 	// VK_VERSION_1_0
8 	alias PFN_vkCreateInstance = VkResult function( const( VkInstanceCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkInstance* pInstance );
9 	alias PFN_vkDestroyInstance = void function( VkInstance instance, const( VkAllocationCallbacks )* pAllocator );
10 	alias PFN_vkEnumeratePhysicalDevices = VkResult function( VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices );
11 	alias PFN_vkGetPhysicalDeviceFeatures = void function( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures );
12 	alias PFN_vkGetPhysicalDeviceFormatProperties = void function( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties );
13 	alias PFN_vkGetPhysicalDeviceImageFormatProperties = VkResult function( VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties );
14 	alias PFN_vkGetPhysicalDeviceProperties = void function( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties );
15 	alias PFN_vkGetPhysicalDeviceQueueFamilyProperties = void function( VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties );
16 	alias PFN_vkGetPhysicalDeviceMemoryProperties = void function( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties );
17 	alias PFN_vkGetInstanceProcAddr = PFN_vkVoidFunction function( VkInstance instance, const( char )* pName );
18 	alias PFN_vkGetDeviceProcAddr = PFN_vkVoidFunction function( VkDevice device, const( char )* pName );
19 	alias PFN_vkCreateDevice = VkResult function( VkPhysicalDevice physicalDevice, const( VkDeviceCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDevice* pDevice );
20 	alias PFN_vkDestroyDevice = void function( VkDevice device, const( VkAllocationCallbacks )* pAllocator );
21 	alias PFN_vkEnumerateInstanceExtensionProperties = VkResult function( const( char )* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties );
22 	alias PFN_vkEnumerateDeviceExtensionProperties = VkResult function( VkPhysicalDevice physicalDevice, const( char )* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties );
23 	alias PFN_vkEnumerateInstanceLayerProperties = VkResult function( uint32_t* pPropertyCount, VkLayerProperties* pProperties );
24 	alias PFN_vkEnumerateDeviceLayerProperties = VkResult function( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties );
25 	alias PFN_vkGetDeviceQueue = void function( VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue );
26 	alias PFN_vkQueueSubmit = VkResult function( VkQueue queue, uint32_t submitCount, const( VkSubmitInfo )* pSubmits, VkFence fence );
27 	alias PFN_vkQueueWaitIdle = VkResult function( VkQueue queue );
28 	alias PFN_vkDeviceWaitIdle = VkResult function( VkDevice device );
29 	alias PFN_vkAllocateMemory = VkResult function( VkDevice device, const( VkMemoryAllocateInfo )* pAllocateInfo, const( VkAllocationCallbacks )* pAllocator, VkDeviceMemory* pMemory );
30 	alias PFN_vkFreeMemory = void function( VkDevice device, VkDeviceMemory memory, const( VkAllocationCallbacks )* pAllocator );
31 	alias PFN_vkMapMemory = VkResult function( VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData );
32 	alias PFN_vkUnmapMemory = void function( VkDevice device, VkDeviceMemory memory );
33 	alias PFN_vkFlushMappedMemoryRanges = VkResult function( VkDevice device, uint32_t memoryRangeCount, const( VkMappedMemoryRange )* pMemoryRanges );
34 	alias PFN_vkInvalidateMappedMemoryRanges = VkResult function( VkDevice device, uint32_t memoryRangeCount, const( VkMappedMemoryRange )* pMemoryRanges );
35 	alias PFN_vkGetDeviceMemoryCommitment = void function( VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes );
36 	alias PFN_vkBindBufferMemory = VkResult function( VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset );
37 	alias PFN_vkBindImageMemory = VkResult function( VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset );
38 	alias PFN_vkGetBufferMemoryRequirements = void function( VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements );
39 	alias PFN_vkGetImageMemoryRequirements = void function( VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements );
40 	alias PFN_vkGetImageSparseMemoryRequirements = void function( VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements );
41 	alias PFN_vkGetPhysicalDeviceSparseImageFormatProperties = void function( VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties );
42 	alias PFN_vkQueueBindSparse = VkResult function( VkQueue queue, uint32_t bindInfoCount, const( VkBindSparseInfo )* pBindInfo, VkFence fence );
43 	alias PFN_vkCreateFence = VkResult function( VkDevice device, const( VkFenceCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkFence* pFence );
44 	alias PFN_vkDestroyFence = void function( VkDevice device, VkFence fence, const( VkAllocationCallbacks )* pAllocator );
45 	alias PFN_vkResetFences = VkResult function( VkDevice device, uint32_t fenceCount, const( VkFence )* pFences );
46 	alias PFN_vkGetFenceStatus = VkResult function( VkDevice device, VkFence fence );
47 	alias PFN_vkWaitForFences = VkResult function( VkDevice device, uint32_t fenceCount, const( VkFence )* pFences, VkBool32 waitAll, uint64_t timeout );
48 	alias PFN_vkCreateSemaphore = VkResult function( VkDevice device, const( VkSemaphoreCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSemaphore* pSemaphore );
49 	alias PFN_vkDestroySemaphore = void function( VkDevice device, VkSemaphore semaphore, const( VkAllocationCallbacks )* pAllocator );
50 	alias PFN_vkCreateEvent = VkResult function( VkDevice device, const( VkEventCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkEvent* pEvent );
51 	alias PFN_vkDestroyEvent = void function( VkDevice device, VkEvent event, const( VkAllocationCallbacks )* pAllocator );
52 	alias PFN_vkGetEventStatus = VkResult function( VkDevice device, VkEvent event );
53 	alias PFN_vkSetEvent = VkResult function( VkDevice device, VkEvent event );
54 	alias PFN_vkResetEvent = VkResult function( VkDevice device, VkEvent event );
55 	alias PFN_vkCreateQueryPool = VkResult function( VkDevice device, const( VkQueryPoolCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkQueryPool* pQueryPool );
56 	alias PFN_vkDestroyQueryPool = void function( VkDevice device, VkQueryPool queryPool, const( VkAllocationCallbacks )* pAllocator );
57 	alias PFN_vkGetQueryPoolResults = VkResult function( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags );
58 	alias PFN_vkCreateBuffer = VkResult function( VkDevice device, const( VkBufferCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkBuffer* pBuffer );
59 	alias PFN_vkDestroyBuffer = void function( VkDevice device, VkBuffer buffer, const( VkAllocationCallbacks )* pAllocator );
60 	alias PFN_vkCreateBufferView = VkResult function( VkDevice device, const( VkBufferViewCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkBufferView* pView );
61 	alias PFN_vkDestroyBufferView = void function( VkDevice device, VkBufferView bufferView, const( VkAllocationCallbacks )* pAllocator );
62 	alias PFN_vkCreateImage = VkResult function( VkDevice device, const( VkImageCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkImage* pImage );
63 	alias PFN_vkDestroyImage = void function( VkDevice device, VkImage image, const( VkAllocationCallbacks )* pAllocator );
64 	alias PFN_vkGetImageSubresourceLayout = void function( VkDevice device, VkImage image, const( VkImageSubresource )* pSubresource, VkSubresourceLayout* pLayout );
65 	alias PFN_vkCreateImageView = VkResult function( VkDevice device, const( VkImageViewCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkImageView* pView );
66 	alias PFN_vkDestroyImageView = void function( VkDevice device, VkImageView imageView, const( VkAllocationCallbacks )* pAllocator );
67 	alias PFN_vkCreateShaderModule = VkResult function( VkDevice device, const( VkShaderModuleCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkShaderModule* pShaderModule );
68 	alias PFN_vkDestroyShaderModule = void function( VkDevice device, VkShaderModule shaderModule, const( VkAllocationCallbacks )* pAllocator );
69 	alias PFN_vkCreatePipelineCache = VkResult function( VkDevice device, const( VkPipelineCacheCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkPipelineCache* pPipelineCache );
70 	alias PFN_vkDestroyPipelineCache = void function( VkDevice device, VkPipelineCache pipelineCache, const( VkAllocationCallbacks )* pAllocator );
71 	alias PFN_vkGetPipelineCacheData = VkResult function( VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData );
72 	alias PFN_vkMergePipelineCaches = VkResult function( VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const( VkPipelineCache )* pSrcCaches );
73 	alias PFN_vkCreateGraphicsPipelines = VkResult function( VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkGraphicsPipelineCreateInfo )* pCreateInfos, const( VkAllocationCallbacks )* pAllocator, VkPipeline* pPipelines );
74 	alias PFN_vkCreateComputePipelines = VkResult function( VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkComputePipelineCreateInfo )* pCreateInfos, const( VkAllocationCallbacks )* pAllocator, VkPipeline* pPipelines );
75 	alias PFN_vkDestroyPipeline = void function( VkDevice device, VkPipeline pipeline, const( VkAllocationCallbacks )* pAllocator );
76 	alias PFN_vkCreatePipelineLayout = VkResult function( VkDevice device, const( VkPipelineLayoutCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkPipelineLayout* pPipelineLayout );
77 	alias PFN_vkDestroyPipelineLayout = void function( VkDevice device, VkPipelineLayout pipelineLayout, const( VkAllocationCallbacks )* pAllocator );
78 	alias PFN_vkCreateSampler = VkResult function( VkDevice device, const( VkSamplerCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSampler* pSampler );
79 	alias PFN_vkDestroySampler = void function( VkDevice device, VkSampler sampler, const( VkAllocationCallbacks )* pAllocator );
80 	alias PFN_vkCreateDescriptorSetLayout = VkResult function( VkDevice device, const( VkDescriptorSetLayoutCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDescriptorSetLayout* pSetLayout );
81 	alias PFN_vkDestroyDescriptorSetLayout = void function( VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const( VkAllocationCallbacks )* pAllocator );
82 	alias PFN_vkCreateDescriptorPool = VkResult function( VkDevice device, const( VkDescriptorPoolCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDescriptorPool* pDescriptorPool );
83 	alias PFN_vkDestroyDescriptorPool = void function( VkDevice device, VkDescriptorPool descriptorPool, const( VkAllocationCallbacks )* pAllocator );
84 	alias PFN_vkResetDescriptorPool = VkResult function( VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags );
85 	alias PFN_vkAllocateDescriptorSets = VkResult function( VkDevice device, const( VkDescriptorSetAllocateInfo )* pAllocateInfo, VkDescriptorSet* pDescriptorSets );
86 	alias PFN_vkFreeDescriptorSets = VkResult function( VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const( VkDescriptorSet )* pDescriptorSets );
87 	alias PFN_vkUpdateDescriptorSets = void function( VkDevice device, uint32_t descriptorWriteCount, const( VkWriteDescriptorSet )* pDescriptorWrites, uint32_t descriptorCopyCount, const( VkCopyDescriptorSet )* pDescriptorCopies );
88 	alias PFN_vkCreateFramebuffer = VkResult function( VkDevice device, const( VkFramebufferCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkFramebuffer* pFramebuffer );
89 	alias PFN_vkDestroyFramebuffer = void function( VkDevice device, VkFramebuffer framebuffer, const( VkAllocationCallbacks )* pAllocator );
90 	alias PFN_vkCreateRenderPass = VkResult function( VkDevice device, const( VkRenderPassCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkRenderPass* pRenderPass );
91 	alias PFN_vkDestroyRenderPass = void function( VkDevice device, VkRenderPass renderPass, const( VkAllocationCallbacks )* pAllocator );
92 	alias PFN_vkGetRenderAreaGranularity = void function( VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity );
93 	alias PFN_vkCreateCommandPool = VkResult function( VkDevice device, const( VkCommandPoolCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkCommandPool* pCommandPool );
94 	alias PFN_vkDestroyCommandPool = void function( VkDevice device, VkCommandPool commandPool, const( VkAllocationCallbacks )* pAllocator );
95 	alias PFN_vkResetCommandPool = VkResult function( VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags );
96 	alias PFN_vkAllocateCommandBuffers = VkResult function( VkDevice device, const( VkCommandBufferAllocateInfo )* pAllocateInfo, VkCommandBuffer* pCommandBuffers );
97 	alias PFN_vkFreeCommandBuffers = void function( VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const( VkCommandBuffer )* pCommandBuffers );
98 	alias PFN_vkBeginCommandBuffer = VkResult function( VkCommandBuffer commandBuffer, const( VkCommandBufferBeginInfo )* pBeginInfo );
99 	alias PFN_vkEndCommandBuffer = VkResult function( VkCommandBuffer commandBuffer );
100 	alias PFN_vkResetCommandBuffer = VkResult function( VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags );
101 	alias PFN_vkCmdBindPipeline = void function( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline );
102 	alias PFN_vkCmdSetViewport = void function( VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const( VkViewport )* pViewports );
103 	alias PFN_vkCmdSetScissor = void function( VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const( VkRect2D )* pScissors );
104 	alias PFN_vkCmdSetLineWidth = void function( VkCommandBuffer commandBuffer, float lineWidth );
105 	alias PFN_vkCmdSetDepthBias = void function( VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor );
106 	alias PFN_vkCmdSetBlendConstants = void function( VkCommandBuffer commandBuffer, const float[4] blendConstants );
107 	alias PFN_vkCmdSetDepthBounds = void function( VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds );
108 	alias PFN_vkCmdSetStencilCompareMask = void function( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask );
109 	alias PFN_vkCmdSetStencilWriteMask = void function( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask );
110 	alias PFN_vkCmdSetStencilReference = void function( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference );
111 	alias PFN_vkCmdBindDescriptorSets = void function( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const( VkDescriptorSet )* pDescriptorSets, uint32_t dynamicOffsetCount, const( uint32_t )* pDynamicOffsets );
112 	alias PFN_vkCmdBindIndexBuffer = void function( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType );
113 	alias PFN_vkCmdBindVertexBuffers = void function( VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const( VkBuffer )* pBuffers, const( VkDeviceSize )* pOffsets );
114 	alias PFN_vkCmdDraw = void function( VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance );
115 	alias PFN_vkCmdDrawIndexed = void function( VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance );
116 	alias PFN_vkCmdDrawIndirect = void function( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride );
117 	alias PFN_vkCmdDrawIndexedIndirect = void function( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride );
118 	alias PFN_vkCmdDispatch = void function( VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ );
119 	alias PFN_vkCmdDispatchIndirect = void function( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset );
120 	alias PFN_vkCmdCopyBuffer = void function( VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const( VkBufferCopy )* pRegions );
121 	alias PFN_vkCmdCopyImage = void function( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageCopy )* pRegions );
122 	alias PFN_vkCmdBlitImage = void function( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageBlit )* pRegions, VkFilter filter );
123 	alias PFN_vkCmdCopyBufferToImage = void function( VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkBufferImageCopy )* pRegions );
124 	alias PFN_vkCmdCopyImageToBuffer = void function( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const( VkBufferImageCopy )* pRegions );
125 	alias PFN_vkCmdUpdateBuffer = void function( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const( void )* pData );
126 	alias PFN_vkCmdFillBuffer = void function( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data );
127 	alias PFN_vkCmdClearColorImage = void function( VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const( VkClearColorValue )* pColor, uint32_t rangeCount, const( VkImageSubresourceRange )* pRanges );
128 	alias PFN_vkCmdClearDepthStencilImage = void function( VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const( VkClearDepthStencilValue )* pDepthStencil, uint32_t rangeCount, const( VkImageSubresourceRange )* pRanges );
129 	alias PFN_vkCmdClearAttachments = void function( VkCommandBuffer commandBuffer, uint32_t attachmentCount, const( VkClearAttachment )* pAttachments, uint32_t rectCount, const( VkClearRect )* pRects );
130 	alias PFN_vkCmdResolveImage = void function( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageResolve )* pRegions );
131 	alias PFN_vkCmdSetEvent = void function( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask );
132 	alias PFN_vkCmdResetEvent = void function( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask );
133 	alias PFN_vkCmdWaitEvents = void function( VkCommandBuffer commandBuffer, uint32_t eventCount, const( VkEvent )* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const( VkMemoryBarrier )* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const( VkBufferMemoryBarrier )* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const( VkImageMemoryBarrier )* pImageMemoryBarriers );
134 	alias PFN_vkCmdPipelineBarrier = void function( VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const( VkMemoryBarrier )* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const( VkBufferMemoryBarrier )* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const( VkImageMemoryBarrier )* pImageMemoryBarriers );
135 	alias PFN_vkCmdBeginQuery = void function( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags );
136 	alias PFN_vkCmdEndQuery = void function( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query );
137 	alias PFN_vkCmdResetQueryPool = void function( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount );
138 	alias PFN_vkCmdWriteTimestamp = void function( VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query );
139 	alias PFN_vkCmdCopyQueryPoolResults = void function( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags );
140 	alias PFN_vkCmdPushConstants = void function( VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const( void )* pValues );
141 	alias PFN_vkCmdBeginRenderPass = void function( VkCommandBuffer commandBuffer, const( VkRenderPassBeginInfo )* pRenderPassBegin, VkSubpassContents contents );
142 	alias PFN_vkCmdNextSubpass = void function( VkCommandBuffer commandBuffer, VkSubpassContents contents );
143 	alias PFN_vkCmdEndRenderPass = void function( VkCommandBuffer commandBuffer );
144 	alias PFN_vkCmdExecuteCommands = void function( VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const( VkCommandBuffer )* pCommandBuffers );
145 
146 	// VK_KHR_surface
147 	alias PFN_vkDestroySurfaceKHR = void function( VkInstance instance, VkSurfaceKHR surface, const( VkAllocationCallbacks )* pAllocator );
148 	alias PFN_vkGetPhysicalDeviceSurfaceSupportKHR = VkResult function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported );
149 	alias PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = VkResult function( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities );
150 	alias PFN_vkGetPhysicalDeviceSurfaceFormatsKHR = VkResult function( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats );
151 	alias PFN_vkGetPhysicalDeviceSurfacePresentModesKHR = VkResult function( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes );
152 
153 	// VK_KHR_swapchain
154 	alias PFN_vkCreateSwapchainKHR = VkResult function( VkDevice device, const( VkSwapchainCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSwapchainKHR* pSwapchain );
155 	alias PFN_vkDestroySwapchainKHR = void function( VkDevice device, VkSwapchainKHR swapchain, const( VkAllocationCallbacks )* pAllocator );
156 	alias PFN_vkGetSwapchainImagesKHR = VkResult function( VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages );
157 	alias PFN_vkAcquireNextImageKHR = VkResult function( VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex );
158 	alias PFN_vkQueuePresentKHR = VkResult function( VkQueue queue, const( VkPresentInfoKHR )* pPresentInfo );
159 
160 	// VK_KHR_display
161 	alias PFN_vkGetPhysicalDeviceDisplayPropertiesKHR = VkResult function( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties );
162 	alias PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR = VkResult function( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties );
163 	alias PFN_vkGetDisplayPlaneSupportedDisplaysKHR = VkResult function( VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays );
164 	alias PFN_vkGetDisplayModePropertiesKHR = VkResult function( VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties );
165 	alias PFN_vkCreateDisplayModeKHR = VkResult function( VkPhysicalDevice physicalDevice, VkDisplayKHR display, const( VkDisplayModeCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDisplayModeKHR* pMode );
166 	alias PFN_vkGetDisplayPlaneCapabilitiesKHR = VkResult function( VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities );
167 	alias PFN_vkCreateDisplayPlaneSurfaceKHR = VkResult function( VkInstance instance, const( VkDisplaySurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
168 
169 	// VK_KHR_display_swapchain
170 	alias PFN_vkCreateSharedSwapchainsKHR = VkResult function( VkDevice device, uint32_t swapchainCount, const( VkSwapchainCreateInfoKHR )* pCreateInfos, const( VkAllocationCallbacks )* pAllocator, VkSwapchainKHR* pSwapchains );
171 
172 	// VK_KHR_xlib_surface
173 	version( VK_USE_PLATFORM_XLIB_KHR ) {
174 		alias PFN_vkCreateXlibSurfaceKHR = VkResult function( VkInstance instance, const( VkXlibSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
175 		alias PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR = VkBool32 function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID );
176 	}
177 
178 	// VK_KHR_xcb_surface
179 	version( VK_USE_PLATFORM_XCB_KHR ) {
180 		alias PFN_vkCreateXcbSurfaceKHR = VkResult function( VkInstance instance, const( VkXcbSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
181 		alias PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR = VkBool32 function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id );
182 	}
183 
184 	// VK_KHR_wayland_surface
185 	version( VK_USE_PLATFORM_WAYLAND_KHR ) {
186 		alias PFN_vkCreateWaylandSurfaceKHR = VkResult function( VkInstance instance, const( VkWaylandSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
187 		alias PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR = VkBool32 function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, wl_display* display );
188 	}
189 
190 	// VK_KHR_mir_surface
191 	version( VK_USE_PLATFORM_MIR_KHR ) {
192 		alias PFN_vkCreateMirSurfaceKHR = VkResult function( VkInstance instance, const( VkMirSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
193 		alias PFN_vkGetPhysicalDeviceMirPresentationSupportKHR = VkBool32 function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection );
194 	}
195 
196 	// VK_KHR_android_surface
197 	version( VK_USE_PLATFORM_ANDROID_KHR ) {
198 		alias PFN_vkCreateAndroidSurfaceKHR = VkResult function( VkInstance instance, const( VkAndroidSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
199 	}
200 
201 	// VK_KHR_win32_surface
202 	version( VK_USE_PLATFORM_WIN32_KHR ) {
203 		alias PFN_vkCreateWin32SurfaceKHR = VkResult function( VkInstance instance, const( VkWin32SurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
204 		alias PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR = VkBool32 function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex );
205 	}
206 
207 	// VK_KHR_get_physical_device_properties2
208 	alias PFN_vkGetPhysicalDeviceFeatures2KHR = void function( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2KHR* pFeatures );
209 	alias PFN_vkGetPhysicalDeviceProperties2KHR = void function( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2KHR* pProperties );
210 	alias PFN_vkGetPhysicalDeviceFormatProperties2KHR = void function( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2KHR* pFormatProperties );
211 	alias PFN_vkGetPhysicalDeviceImageFormatProperties2KHR = VkResult function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceImageFormatInfo2KHR )* pImageFormatInfo, VkImageFormatProperties2KHR* pImageFormatProperties );
212 	alias PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR = void function( VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2KHR* pQueueFamilyProperties );
213 	alias PFN_vkGetPhysicalDeviceMemoryProperties2KHR = void function( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties );
214 	alias PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR = void function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceSparseImageFormatInfo2KHR )* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2KHR* pProperties );
215 
216 	// VK_KHR_maintenance1
217 	alias PFN_vkTrimCommandPoolKHR = void function( VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags );
218 
219 	// VK_KHR_external_memory_capabilities
220 	alias PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR = void function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceExternalBufferInfoKHR )* pExternalBufferInfo, VkExternalBufferPropertiesKHR* pExternalBufferProperties );
221 
222 	// VK_KHR_external_memory_win32
223 	version( VK_USE_PLATFORM_WIN32_KHR ) {
224 		alias PFN_vkGetMemoryWin32HandleKHR = VkResult function( VkDevice device, const( VkMemoryGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle );
225 		alias PFN_vkGetMemoryWin32HandlePropertiesKHR = VkResult function( VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties );
226 	}
227 
228 	// VK_KHR_external_memory_fd
229 	alias PFN_vkGetMemoryFdKHR = VkResult function( VkDevice device, const( VkMemoryGetFdInfoKHR )* pGetFdInfo, int* pFd );
230 	alias PFN_vkGetMemoryFdPropertiesKHR = VkResult function( VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties );
231 
232 	// VK_KHR_external_semaphore_capabilities
233 	alias PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = void function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceExternalSemaphoreInfoKHR )* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties );
234 
235 	// VK_KHR_external_semaphore_win32
236 	version( VK_USE_PLATFORM_WIN32_KHR ) {
237 		alias PFN_vkImportSemaphoreWin32HandleKHR = VkResult function( VkDevice device, const( VkImportSemaphoreWin32HandleInfoKHR )* pImportSemaphoreWin32HandleInfo );
238 		alias PFN_vkGetSemaphoreWin32HandleKHR = VkResult function( VkDevice device, const( VkSemaphoreGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle );
239 	}
240 
241 	// VK_KHR_external_semaphore_fd
242 	alias PFN_vkImportSemaphoreFdKHR = VkResult function( VkDevice device, const( VkImportSemaphoreFdInfoKHR )* pImportSemaphoreFdInfo );
243 	alias PFN_vkGetSemaphoreFdKHR = VkResult function( VkDevice device, const( VkSemaphoreGetFdInfoKHR )* pGetFdInfo, int* pFd );
244 
245 	// VK_KHR_push_descriptor
246 	alias PFN_vkCmdPushDescriptorSetKHR = void function( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const( VkWriteDescriptorSet )* pDescriptorWrites );
247 
248 	// VK_KHR_descriptor_update_template
249 	alias PFN_vkCreateDescriptorUpdateTemplateKHR = VkResult function( VkDevice device, const( VkDescriptorUpdateTemplateCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate );
250 	alias PFN_vkDestroyDescriptorUpdateTemplateKHR = void function( VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const( VkAllocationCallbacks )* pAllocator );
251 	alias PFN_vkUpdateDescriptorSetWithTemplateKHR = void function( VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const( void )* pData );
252 	alias PFN_vkCmdPushDescriptorSetWithTemplateKHR = void function( VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const( void )* pData );
253 
254 	// VK_KHR_shared_presentable_image
255 	alias PFN_vkGetSwapchainStatusKHR = VkResult function( VkDevice device, VkSwapchainKHR swapchain );
256 
257 	// VK_KHR_external_fence_capabilities
258 	alias PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR = void function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceExternalFenceInfoKHR )* pExternalFenceInfo, VkExternalFencePropertiesKHR* pExternalFenceProperties );
259 
260 	// VK_KHR_external_fence_win32
261 	version( VK_USE_PLATFORM_WIN32_KHR ) {
262 		alias PFN_vkImportFenceWin32HandleKHR = VkResult function( VkDevice device, const( VkImportFenceWin32HandleInfoKHR )* pImportFenceWin32HandleInfo );
263 		alias PFN_vkGetFenceWin32HandleKHR = VkResult function( VkDevice device, const( VkFenceGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle );
264 	}
265 
266 	// VK_KHR_external_fence_fd
267 	alias PFN_vkImportFenceFdKHR = VkResult function( VkDevice device, const( VkImportFenceFdInfoKHR )* pImportFenceFdInfo );
268 	alias PFN_vkGetFenceFdKHR = VkResult function( VkDevice device, const( VkFenceGetFdInfoKHR )* pGetFdInfo, int* pFd );
269 
270 	// VK_KHR_get_surface_capabilities2
271 	alias PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR = VkResult function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceSurfaceInfo2KHR )* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities );
272 	alias PFN_vkGetPhysicalDeviceSurfaceFormats2KHR = VkResult function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceSurfaceInfo2KHR )* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats );
273 
274 	// VK_KHR_get_memory_requirements2
275 	alias PFN_vkGetImageMemoryRequirements2KHR = void function( VkDevice device, const( VkImageMemoryRequirementsInfo2KHR )* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements );
276 	alias PFN_vkGetBufferMemoryRequirements2KHR = void function( VkDevice device, const( VkBufferMemoryRequirementsInfo2KHR )* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements );
277 	alias PFN_vkGetImageSparseMemoryRequirements2KHR = void function( VkDevice device, const( VkImageSparseMemoryRequirementsInfo2KHR )* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements );
278 
279 	// VK_KHR_sampler_ycbcr_conversion
280 	alias PFN_vkCreateSamplerYcbcrConversionKHR = VkResult function( VkDevice device, const( VkSamplerYcbcrConversionCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSamplerYcbcrConversionKHR* pYcbcrConversion );
281 	alias PFN_vkDestroySamplerYcbcrConversionKHR = void function( VkDevice device, VkSamplerYcbcrConversionKHR ycbcrConversion, const( VkAllocationCallbacks )* pAllocator );
282 
283 	// VK_KHR_bind_memory2
284 	alias PFN_vkBindBufferMemory2KHR = VkResult function( VkDevice device, uint32_t bindInfoCount, const( VkBindBufferMemoryInfoKHR )* pBindInfos );
285 	alias PFN_vkBindImageMemory2KHR = VkResult function( VkDevice device, uint32_t bindInfoCount, const( VkBindImageMemoryInfoKHR )* pBindInfos );
286 
287 	// VK_ANDROID_native_buffer
288 	alias PFN_vkGetSwapchainGrallocUsageANDROID = VkResult function( VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage );
289 	alias PFN_vkAcquireImageANDROID = VkResult function( VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence );
290 	alias PFN_vkQueueSignalReleaseImageANDROID = VkResult function( VkQueue queue, uint32_t waitSemaphoreCount, const( VkSemaphore )* pWaitSemaphores, VkImage image, int* pNativeFenceFd );
291 
292 	// VK_EXT_debug_report
293 	alias PFN_vkCreateDebugReportCallbackEXT = VkResult function( VkInstance instance, const( VkDebugReportCallbackCreateInfoEXT )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDebugReportCallbackEXT* pCallback );
294 	alias PFN_vkDestroyDebugReportCallbackEXT = void function( VkInstance instance, VkDebugReportCallbackEXT callback, const( VkAllocationCallbacks )* pAllocator );
295 	alias PFN_vkDebugReportMessageEXT = void function( VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const( char )* pLayerPrefix, const( char )* pMessage );
296 
297 	// VK_EXT_debug_marker
298 	alias PFN_vkDebugMarkerSetObjectTagEXT = VkResult function( VkDevice device, const( VkDebugMarkerObjectTagInfoEXT )* pTagInfo );
299 	alias PFN_vkDebugMarkerSetObjectNameEXT = VkResult function( VkDevice device, const( VkDebugMarkerObjectNameInfoEXT )* pNameInfo );
300 	alias PFN_vkCmdDebugMarkerBeginEXT = void function( VkCommandBuffer commandBuffer, const( VkDebugMarkerMarkerInfoEXT )* pMarkerInfo );
301 	alias PFN_vkCmdDebugMarkerEndEXT = void function( VkCommandBuffer commandBuffer );
302 	alias PFN_vkCmdDebugMarkerInsertEXT = void function( VkCommandBuffer commandBuffer, const( VkDebugMarkerMarkerInfoEXT )* pMarkerInfo );
303 
304 	// VK_AMD_draw_indirect_count
305 	alias PFN_vkCmdDrawIndirectCountAMD = void function( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride );
306 	alias PFN_vkCmdDrawIndexedIndirectCountAMD = void function( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride );
307 
308 	// VK_NV_external_memory_capabilities
309 	alias PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV = VkResult function( VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties );
310 
311 	// VK_NV_external_memory_win32
312 	version( VK_USE_PLATFORM_WIN32_KHR ) {
313 		alias PFN_vkGetMemoryWin32HandleNV = VkResult function( VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle );
314 	}
315 
316 	// VK_KHX_device_group
317 	alias PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX = void function( VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures );
318 	alias PFN_vkCmdSetDeviceMaskKHX = void function( VkCommandBuffer commandBuffer, uint32_t deviceMask );
319 	alias PFN_vkCmdDispatchBaseKHX = void function( VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ );
320 	alias PFN_vkGetDeviceGroupPresentCapabilitiesKHX = VkResult function( VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities );
321 	alias PFN_vkGetDeviceGroupSurfacePresentModesKHX = VkResult function( VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes );
322 	alias PFN_vkGetPhysicalDevicePresentRectanglesKHX = VkResult function( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects );
323 	alias PFN_vkAcquireNextImage2KHX = VkResult function( VkDevice device, const( VkAcquireNextImageInfoKHX )* pAcquireInfo, uint32_t* pImageIndex );
324 
325 	// VK_NN_vi_surface
326 	alias PFN_vkCreateViSurfaceNN = VkResult function( VkInstance instance, const( VkViSurfaceCreateInfoNN )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
327 
328 	// VK_KHX_device_group_creation
329 	alias PFN_vkEnumeratePhysicalDeviceGroupsKHX = VkResult function( VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties );
330 
331 	// VK_NVX_device_generated_commands
332 	alias PFN_vkCmdProcessCommandsNVX = void function( VkCommandBuffer commandBuffer, const( VkCmdProcessCommandsInfoNVX )* pProcessCommandsInfo );
333 	alias PFN_vkCmdReserveSpaceForCommandsNVX = void function( VkCommandBuffer commandBuffer, const( VkCmdReserveSpaceForCommandsInfoNVX )* pReserveSpaceInfo );
334 	alias PFN_vkCreateIndirectCommandsLayoutNVX = VkResult function( VkDevice device, const( VkIndirectCommandsLayoutCreateInfoNVX )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout );
335 	alias PFN_vkDestroyIndirectCommandsLayoutNVX = void function( VkDevice device, VkIndirectCommandsLayoutNVX indirectCommandsLayout, const( VkAllocationCallbacks )* pAllocator );
336 	alias PFN_vkCreateObjectTableNVX = VkResult function( VkDevice device, const( VkObjectTableCreateInfoNVX )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkObjectTableNVX* pObjectTable );
337 	alias PFN_vkDestroyObjectTableNVX = void function( VkDevice device, VkObjectTableNVX objectTable, const( VkAllocationCallbacks )* pAllocator );
338 	alias PFN_vkRegisterObjectsNVX = VkResult function( VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const( VkObjectTableEntryNVX* )* ppObjectTableEntries, const( uint32_t )* pObjectIndices );
339 	alias PFN_vkUnregisterObjectsNVX = VkResult function( VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const( VkObjectEntryTypeNVX )* pObjectEntryTypes, const( uint32_t )* pObjectIndices );
340 	alias PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX = void function( VkPhysicalDevice physicalDevice, VkDeviceGeneratedCommandsFeaturesNVX* pFeatures, VkDeviceGeneratedCommandsLimitsNVX* pLimits );
341 
342 	// VK_NV_clip_space_w_scaling
343 	alias PFN_vkCmdSetViewportWScalingNV = void function( VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const( VkViewportWScalingNV )* pViewportWScalings );
344 
345 	// VK_EXT_direct_mode_display
346 	alias PFN_vkReleaseDisplayEXT = VkResult function( VkPhysicalDevice physicalDevice, VkDisplayKHR display );
347 
348 	// VK_EXT_acquire_xlib_display
349 	version( VK_USE_PLATFORM_XLIB_KHR ) {
350 		alias PFN_vkAcquireXlibDisplayEXT = VkResult function( VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display );
351 		alias PFN_vkGetRandROutputDisplayEXT = VkResult function( VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay );
352 	}
353 
354 	// VK_EXT_display_surface_counter
355 	alias PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT = VkResult function( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities );
356 
357 	// VK_EXT_display_control
358 	alias PFN_vkDisplayPowerControlEXT = VkResult function( VkDevice device, VkDisplayKHR display, const( VkDisplayPowerInfoEXT )* pDisplayPowerInfo );
359 	alias PFN_vkRegisterDeviceEventEXT = VkResult function( VkDevice device, const( VkDeviceEventInfoEXT )* pDeviceEventInfo, const( VkAllocationCallbacks )* pAllocator, VkFence* pFence );
360 	alias PFN_vkRegisterDisplayEventEXT = VkResult function( VkDevice device, VkDisplayKHR display, const( VkDisplayEventInfoEXT )* pDisplayEventInfo, const( VkAllocationCallbacks )* pAllocator, VkFence* pFence );
361 	alias PFN_vkGetSwapchainCounterEXT = VkResult function( VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue );
362 
363 	// VK_GOOGLE_display_timing
364 	alias PFN_vkGetRefreshCycleDurationGOOGLE = VkResult function( VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties );
365 	alias PFN_vkGetPastPresentationTimingGOOGLE = VkResult function( VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings );
366 
367 	// VK_EXT_discard_rectangles
368 	alias PFN_vkCmdSetDiscardRectangleEXT = void function( VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const( VkRect2D )* pDiscardRectangles );
369 
370 	// VK_EXT_hdr_metadata
371 	alias PFN_vkSetHdrMetadataEXT = void function( VkDevice device, uint32_t swapchainCount, const( VkSwapchainKHR )* pSwapchains, const( VkHdrMetadataEXT )* pMetadata );
372 
373 	// VK_MVK_ios_surface
374 	alias PFN_vkCreateIOSSurfaceMVK = VkResult function( VkInstance instance, const( VkIOSSurfaceCreateInfoMVK )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
375 
376 	// VK_MVK_macos_surface
377 	alias PFN_vkCreateMacOSSurfaceMVK = VkResult function( VkInstance instance, const( VkMacOSSurfaceCreateInfoMVK )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
378 
379 	// VK_EXT_sample_locations
380 	alias PFN_vkCmdSetSampleLocationsEXT = void function( VkCommandBuffer commandBuffer, const( VkSampleLocationsInfoEXT )* pSampleLocationsInfo );
381 	alias PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT = void function( VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties );
382 
383 	// VK_EXT_validation_cache
384 	alias PFN_vkCreateValidationCacheEXT = VkResult function( VkDevice device, const( VkValidationCacheCreateInfoEXT )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkValidationCacheEXT* pValidationCache );
385 	alias PFN_vkDestroyValidationCacheEXT = void function( VkDevice device, VkValidationCacheEXT validationCache, const( VkAllocationCallbacks )* pAllocator );
386 	alias PFN_vkMergeValidationCachesEXT = VkResult function( VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const( VkValidationCacheEXT )* pSrcCaches );
387 	alias PFN_vkGetValidationCacheDataEXT = VkResult function( VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData );
388 }
389 
390 __gshared {
391 
392 	// VK_VERSION_1_0
393 	PFN_vkCreateInstance vkCreateInstance;
394 	PFN_vkDestroyInstance vkDestroyInstance;
395 	PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
396 	PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
397 	PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
398 	PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties;
399 	PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
400 	PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
401 	PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
402 	PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
403 	PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
404 	PFN_vkCreateDevice vkCreateDevice;
405 	PFN_vkDestroyDevice vkDestroyDevice;
406 	PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
407 	PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
408 	PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
409 	PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
410 	PFN_vkGetDeviceQueue vkGetDeviceQueue;
411 	PFN_vkQueueSubmit vkQueueSubmit;
412 	PFN_vkQueueWaitIdle vkQueueWaitIdle;
413 	PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
414 	PFN_vkAllocateMemory vkAllocateMemory;
415 	PFN_vkFreeMemory vkFreeMemory;
416 	PFN_vkMapMemory vkMapMemory;
417 	PFN_vkUnmapMemory vkUnmapMemory;
418 	PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
419 	PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
420 	PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment;
421 	PFN_vkBindBufferMemory vkBindBufferMemory;
422 	PFN_vkBindImageMemory vkBindImageMemory;
423 	PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
424 	PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
425 	PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
426 	PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties;
427 	PFN_vkQueueBindSparse vkQueueBindSparse;
428 	PFN_vkCreateFence vkCreateFence;
429 	PFN_vkDestroyFence vkDestroyFence;
430 	PFN_vkResetFences vkResetFences;
431 	PFN_vkGetFenceStatus vkGetFenceStatus;
432 	PFN_vkWaitForFences vkWaitForFences;
433 	PFN_vkCreateSemaphore vkCreateSemaphore;
434 	PFN_vkDestroySemaphore vkDestroySemaphore;
435 	PFN_vkCreateEvent vkCreateEvent;
436 	PFN_vkDestroyEvent vkDestroyEvent;
437 	PFN_vkGetEventStatus vkGetEventStatus;
438 	PFN_vkSetEvent vkSetEvent;
439 	PFN_vkResetEvent vkResetEvent;
440 	PFN_vkCreateQueryPool vkCreateQueryPool;
441 	PFN_vkDestroyQueryPool vkDestroyQueryPool;
442 	PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
443 	PFN_vkCreateBuffer vkCreateBuffer;
444 	PFN_vkDestroyBuffer vkDestroyBuffer;
445 	PFN_vkCreateBufferView vkCreateBufferView;
446 	PFN_vkDestroyBufferView vkDestroyBufferView;
447 	PFN_vkCreateImage vkCreateImage;
448 	PFN_vkDestroyImage vkDestroyImage;
449 	PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
450 	PFN_vkCreateImageView vkCreateImageView;
451 	PFN_vkDestroyImageView vkDestroyImageView;
452 	PFN_vkCreateShaderModule vkCreateShaderModule;
453 	PFN_vkDestroyShaderModule vkDestroyShaderModule;
454 	PFN_vkCreatePipelineCache vkCreatePipelineCache;
455 	PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
456 	PFN_vkGetPipelineCacheData vkGetPipelineCacheData;
457 	PFN_vkMergePipelineCaches vkMergePipelineCaches;
458 	PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
459 	PFN_vkCreateComputePipelines vkCreateComputePipelines;
460 	PFN_vkDestroyPipeline vkDestroyPipeline;
461 	PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
462 	PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
463 	PFN_vkCreateSampler vkCreateSampler;
464 	PFN_vkDestroySampler vkDestroySampler;
465 	PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
466 	PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
467 	PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
468 	PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
469 	PFN_vkResetDescriptorPool vkResetDescriptorPool;
470 	PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
471 	PFN_vkFreeDescriptorSets vkFreeDescriptorSets;
472 	PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
473 	PFN_vkCreateFramebuffer vkCreateFramebuffer;
474 	PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
475 	PFN_vkCreateRenderPass vkCreateRenderPass;
476 	PFN_vkDestroyRenderPass vkDestroyRenderPass;
477 	PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity;
478 	PFN_vkCreateCommandPool vkCreateCommandPool;
479 	PFN_vkDestroyCommandPool vkDestroyCommandPool;
480 	PFN_vkResetCommandPool vkResetCommandPool;
481 	PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
482 	PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
483 	PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
484 	PFN_vkEndCommandBuffer vkEndCommandBuffer;
485 	PFN_vkResetCommandBuffer vkResetCommandBuffer;
486 	PFN_vkCmdBindPipeline vkCmdBindPipeline;
487 	PFN_vkCmdSetViewport vkCmdSetViewport;
488 	PFN_vkCmdSetScissor vkCmdSetScissor;
489 	PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
490 	PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
491 	PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants;
492 	PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds;
493 	PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
494 	PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
495 	PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
496 	PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
497 	PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
498 	PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
499 	PFN_vkCmdDraw vkCmdDraw;
500 	PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
501 	PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
502 	PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
503 	PFN_vkCmdDispatch vkCmdDispatch;
504 	PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect;
505 	PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
506 	PFN_vkCmdCopyImage vkCmdCopyImage;
507 	PFN_vkCmdBlitImage vkCmdBlitImage;
508 	PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
509 	PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer;
510 	PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer;
511 	PFN_vkCmdFillBuffer vkCmdFillBuffer;
512 	PFN_vkCmdClearColorImage vkCmdClearColorImage;
513 	PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage;
514 	PFN_vkCmdClearAttachments vkCmdClearAttachments;
515 	PFN_vkCmdResolveImage vkCmdResolveImage;
516 	PFN_vkCmdSetEvent vkCmdSetEvent;
517 	PFN_vkCmdResetEvent vkCmdResetEvent;
518 	PFN_vkCmdWaitEvents vkCmdWaitEvents;
519 	PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
520 	PFN_vkCmdBeginQuery vkCmdBeginQuery;
521 	PFN_vkCmdEndQuery vkCmdEndQuery;
522 	PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
523 	PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp;
524 	PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
525 	PFN_vkCmdPushConstants vkCmdPushConstants;
526 	PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
527 	PFN_vkCmdNextSubpass vkCmdNextSubpass;
528 	PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
529 	PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
530 
531 	// VK_KHR_surface
532 	PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
533 	PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR;
534 	PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
535 	PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
536 	PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR;
537 
538 	// VK_KHR_swapchain
539 	PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;
540 	PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
541 	PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
542 	PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
543 	PFN_vkQueuePresentKHR vkQueuePresentKHR;
544 
545 	// VK_KHR_display
546 	PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR;
547 	PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR;
548 	PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR;
549 	PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR;
550 	PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR;
551 	PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR;
552 	PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR;
553 
554 	// VK_KHR_display_swapchain
555 	PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
556 
557 	// VK_KHR_xlib_surface
558 	version( VK_USE_PLATFORM_XLIB_KHR ) {
559 		PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR;
560 		PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR;
561 	}
562 
563 	// VK_KHR_xcb_surface
564 	version( VK_USE_PLATFORM_XCB_KHR ) {
565 		PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR;
566 		PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR;
567 	}
568 
569 	// VK_KHR_wayland_surface
570 	version( VK_USE_PLATFORM_WAYLAND_KHR ) {
571 		PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR;
572 		PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR;
573 	}
574 
575 	// VK_KHR_mir_surface
576 	version( VK_USE_PLATFORM_MIR_KHR ) {
577 		PFN_vkCreateMirSurfaceKHR vkCreateMirSurfaceKHR;
578 		PFN_vkGetPhysicalDeviceMirPresentationSupportKHR vkGetPhysicalDeviceMirPresentationSupportKHR;
579 	}
580 
581 	// VK_KHR_android_surface
582 	version( VK_USE_PLATFORM_ANDROID_KHR ) {
583 		PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
584 	}
585 
586 	// VK_KHR_win32_surface
587 	version( VK_USE_PLATFORM_WIN32_KHR ) {
588 		PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR;
589 		PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR;
590 	}
591 
592 	// VK_KHR_get_physical_device_properties2
593 	PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR;
594 	PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR;
595 	PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR;
596 	PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR;
597 	PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR;
598 	PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR;
599 	PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR;
600 
601 	// VK_KHR_maintenance1
602 	PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
603 
604 	// VK_KHR_external_memory_capabilities
605 	PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR;
606 
607 	// VK_KHR_external_memory_win32
608 	version( VK_USE_PLATFORM_WIN32_KHR ) {
609 		PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR;
610 		PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR;
611 	}
612 
613 	// VK_KHR_external_memory_fd
614 	PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR;
615 	PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR;
616 
617 	// VK_KHR_external_semaphore_capabilities
618 	PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR;
619 
620 	// VK_KHR_external_semaphore_win32
621 	version( VK_USE_PLATFORM_WIN32_KHR ) {
622 		PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR;
623 		PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR;
624 	}
625 
626 	// VK_KHR_external_semaphore_fd
627 	PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR;
628 	PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR;
629 
630 	// VK_KHR_push_descriptor
631 	PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR;
632 
633 	// VK_KHR_descriptor_update_template
634 	PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR;
635 	PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR;
636 	PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR;
637 	PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR;
638 
639 	// VK_KHR_shared_presentable_image
640 	PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR;
641 
642 	// VK_KHR_external_fence_capabilities
643 	PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;
644 
645 	// VK_KHR_external_fence_win32
646 	version( VK_USE_PLATFORM_WIN32_KHR ) {
647 		PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR;
648 		PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR;
649 	}
650 
651 	// VK_KHR_external_fence_fd
652 	PFN_vkImportFenceFdKHR vkImportFenceFdKHR;
653 	PFN_vkGetFenceFdKHR vkGetFenceFdKHR;
654 
655 	// VK_KHR_get_surface_capabilities2
656 	PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR;
657 	PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR;
658 
659 	// VK_KHR_get_memory_requirements2
660 	PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR;
661 	PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR;
662 	PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR;
663 
664 	// VK_KHR_sampler_ycbcr_conversion
665 	PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR;
666 	PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR;
667 
668 	// VK_KHR_bind_memory2
669 	PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR;
670 	PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR;
671 
672 	// VK_ANDROID_native_buffer
673 	PFN_vkGetSwapchainGrallocUsageANDROID vkGetSwapchainGrallocUsageANDROID;
674 	PFN_vkAcquireImageANDROID vkAcquireImageANDROID;
675 	PFN_vkQueueSignalReleaseImageANDROID vkQueueSignalReleaseImageANDROID;
676 
677 	// VK_EXT_debug_report
678 	PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;
679 	PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;
680 	PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;
681 
682 	// VK_EXT_debug_marker
683 	PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT;
684 	PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT;
685 	PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT;
686 	PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT;
687 	PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT;
688 
689 	// VK_AMD_draw_indirect_count
690 	PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD;
691 	PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD;
692 
693 	// VK_NV_external_memory_capabilities
694 	PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV;
695 
696 	// VK_NV_external_memory_win32
697 	version( VK_USE_PLATFORM_WIN32_KHR ) {
698 		PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV;
699 	}
700 
701 	// VK_KHX_device_group
702 	PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX vkGetDeviceGroupPeerMemoryFeaturesKHX;
703 	PFN_vkCmdSetDeviceMaskKHX vkCmdSetDeviceMaskKHX;
704 	PFN_vkCmdDispatchBaseKHX vkCmdDispatchBaseKHX;
705 	PFN_vkGetDeviceGroupPresentCapabilitiesKHX vkGetDeviceGroupPresentCapabilitiesKHX;
706 	PFN_vkGetDeviceGroupSurfacePresentModesKHX vkGetDeviceGroupSurfacePresentModesKHX;
707 	PFN_vkGetPhysicalDevicePresentRectanglesKHX vkGetPhysicalDevicePresentRectanglesKHX;
708 	PFN_vkAcquireNextImage2KHX vkAcquireNextImage2KHX;
709 
710 	// VK_NN_vi_surface
711 	PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN;
712 
713 	// VK_KHX_device_group_creation
714 	PFN_vkEnumeratePhysicalDeviceGroupsKHX vkEnumeratePhysicalDeviceGroupsKHX;
715 
716 	// VK_NVX_device_generated_commands
717 	PFN_vkCmdProcessCommandsNVX vkCmdProcessCommandsNVX;
718 	PFN_vkCmdReserveSpaceForCommandsNVX vkCmdReserveSpaceForCommandsNVX;
719 	PFN_vkCreateIndirectCommandsLayoutNVX vkCreateIndirectCommandsLayoutNVX;
720 	PFN_vkDestroyIndirectCommandsLayoutNVX vkDestroyIndirectCommandsLayoutNVX;
721 	PFN_vkCreateObjectTableNVX vkCreateObjectTableNVX;
722 	PFN_vkDestroyObjectTableNVX vkDestroyObjectTableNVX;
723 	PFN_vkRegisterObjectsNVX vkRegisterObjectsNVX;
724 	PFN_vkUnregisterObjectsNVX vkUnregisterObjectsNVX;
725 	PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX;
726 
727 	// VK_NV_clip_space_w_scaling
728 	PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV;
729 
730 	// VK_EXT_direct_mode_display
731 	PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT;
732 
733 	// VK_EXT_acquire_xlib_display
734 	version( VK_USE_PLATFORM_XLIB_KHR ) {
735 		PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT;
736 		PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT;
737 	}
738 
739 	// VK_EXT_display_surface_counter
740 	PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT;
741 
742 	// VK_EXT_display_control
743 	PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT;
744 	PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT;
745 	PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT;
746 	PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT;
747 
748 	// VK_GOOGLE_display_timing
749 	PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE;
750 	PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE;
751 
752 	// VK_EXT_discard_rectangles
753 	PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT;
754 
755 	// VK_EXT_hdr_metadata
756 	PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT;
757 
758 	// VK_MVK_ios_surface
759 	PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK;
760 
761 	// VK_MVK_macos_surface
762 	PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
763 
764 	// VK_EXT_sample_locations
765 	PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT;
766 	PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT;
767 
768 	// VK_EXT_validation_cache
769 	PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT;
770 	PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT;
771 	PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
772 	PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT;
773 }
774 
775 /// if not using version "with-derelict-loader" this function must be called first
776 /// sets vkCreateInstance function pointer and acquires basic functions to retrieve information about the implementation
777 void loadGlobalLevelFunctions( typeof( vkGetInstanceProcAddr ) getProcAddr ) {
778 	vkGetInstanceProcAddr = getProcAddr;
779 	vkEnumerateInstanceExtensionProperties = cast( typeof( vkEnumerateInstanceExtensionProperties )) vkGetInstanceProcAddr( null, "vkEnumerateInstanceExtensionProperties" );
780 	vkEnumerateInstanceLayerProperties = cast( typeof( vkEnumerateInstanceLayerProperties )) vkGetInstanceProcAddr( null, "vkEnumerateInstanceLayerProperties" );
781 	vkCreateInstance = cast( typeof( vkCreateInstance )) vkGetInstanceProcAddr( null, "vkCreateInstance" );
782 }
783 
784 /// with a valid VkInstance call this function to retrieve additional VkInstance, VkPhysicalDevice, ... related functions
785 void loadInstanceLevelFunctions( VkInstance instance ) {
786 	assert( vkGetInstanceProcAddr !is null, "Must call loadGlobalLevelFunctions before loadInstanceLevelFunctions" );
787 
788 	// VK_VERSION_1_0
789 	vkDestroyInstance = cast( typeof( vkDestroyInstance )) vkGetInstanceProcAddr( instance, "vkDestroyInstance" );
790 	vkEnumeratePhysicalDevices = cast( typeof( vkEnumeratePhysicalDevices )) vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDevices" );
791 	vkGetPhysicalDeviceFeatures = cast( typeof( vkGetPhysicalDeviceFeatures )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures" );
792 	vkGetPhysicalDeviceFormatProperties = cast( typeof( vkGetPhysicalDeviceFormatProperties )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties" );
793 	vkGetPhysicalDeviceImageFormatProperties = cast( typeof( vkGetPhysicalDeviceImageFormatProperties )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties" );
794 	vkGetPhysicalDeviceProperties = cast( typeof( vkGetPhysicalDeviceProperties )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties" );
795 	vkGetPhysicalDeviceQueueFamilyProperties = cast( typeof( vkGetPhysicalDeviceQueueFamilyProperties )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" );
796 	vkGetPhysicalDeviceMemoryProperties = cast( typeof( vkGetPhysicalDeviceMemoryProperties )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" );
797 	vkGetDeviceProcAddr = cast( typeof( vkGetDeviceProcAddr )) vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" );
798 	vkCreateDevice = cast( typeof( vkCreateDevice )) vkGetInstanceProcAddr( instance, "vkCreateDevice" );
799 	vkEnumerateDeviceExtensionProperties = cast( typeof( vkEnumerateDeviceExtensionProperties )) vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" );
800 	vkEnumerateDeviceLayerProperties = cast( typeof( vkEnumerateDeviceLayerProperties )) vkGetInstanceProcAddr( instance, "vkEnumerateDeviceLayerProperties" );
801 	vkGetPhysicalDeviceSparseImageFormatProperties = cast( typeof( vkGetPhysicalDeviceSparseImageFormatProperties )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties" );
802 
803 	// VK_KHR_surface
804 	vkDestroySurfaceKHR = cast( typeof( vkDestroySurfaceKHR )) vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" );
805 	vkGetPhysicalDeviceSurfaceSupportKHR = cast( typeof( vkGetPhysicalDeviceSurfaceSupportKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceSupportKHR" );
806 	vkGetPhysicalDeviceSurfaceCapabilitiesKHR = cast( typeof( vkGetPhysicalDeviceSurfaceCapabilitiesKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" );
807 	vkGetPhysicalDeviceSurfaceFormatsKHR = cast( typeof( vkGetPhysicalDeviceSurfaceFormatsKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormatsKHR" );
808 	vkGetPhysicalDeviceSurfacePresentModesKHR = cast( typeof( vkGetPhysicalDeviceSurfacePresentModesKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModesKHR" );
809 
810 	// VK_KHR_display
811 	vkGetPhysicalDeviceDisplayPropertiesKHR = cast( typeof( vkGetPhysicalDeviceDisplayPropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPropertiesKHR" );
812 	vkGetPhysicalDeviceDisplayPlanePropertiesKHR = cast( typeof( vkGetPhysicalDeviceDisplayPlanePropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" );
813 	vkGetDisplayPlaneSupportedDisplaysKHR = cast( typeof( vkGetDisplayPlaneSupportedDisplaysKHR )) vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneSupportedDisplaysKHR" );
814 	vkGetDisplayModePropertiesKHR = cast( typeof( vkGetDisplayModePropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetDisplayModePropertiesKHR" );
815 	vkCreateDisplayModeKHR = cast( typeof( vkCreateDisplayModeKHR )) vkGetInstanceProcAddr( instance, "vkCreateDisplayModeKHR" );
816 	vkGetDisplayPlaneCapabilitiesKHR = cast( typeof( vkGetDisplayPlaneCapabilitiesKHR )) vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilitiesKHR" );
817 	vkCreateDisplayPlaneSurfaceKHR = cast( typeof( vkCreateDisplayPlaneSurfaceKHR )) vkGetInstanceProcAddr( instance, "vkCreateDisplayPlaneSurfaceKHR" );
818 
819 	// VK_KHR_xlib_surface
820 	version( VK_USE_PLATFORM_XLIB_KHR ) {
821 		vkCreateXlibSurfaceKHR = cast( typeof( vkCreateXlibSurfaceKHR )) vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" );
822 		vkGetPhysicalDeviceXlibPresentationSupportKHR = cast( typeof( vkGetPhysicalDeviceXlibPresentationSupportKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR" );
823 	}
824 
825 	// VK_KHR_xcb_surface
826 	version( VK_USE_PLATFORM_XCB_KHR ) {
827 		vkCreateXcbSurfaceKHR = cast( typeof( vkCreateXcbSurfaceKHR )) vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" );
828 		vkGetPhysicalDeviceXcbPresentationSupportKHR = cast( typeof( vkGetPhysicalDeviceXcbPresentationSupportKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR" );
829 	}
830 
831 	// VK_KHR_wayland_surface
832 	version( VK_USE_PLATFORM_WAYLAND_KHR ) {
833 		vkCreateWaylandSurfaceKHR = cast( typeof( vkCreateWaylandSurfaceKHR )) vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" );
834 		vkGetPhysicalDeviceWaylandPresentationSupportKHR = cast( typeof( vkGetPhysicalDeviceWaylandPresentationSupportKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR" );
835 	}
836 
837 	// VK_KHR_mir_surface
838 	version( VK_USE_PLATFORM_MIR_KHR ) {
839 		vkCreateMirSurfaceKHR = cast( typeof( vkCreateMirSurfaceKHR )) vkGetInstanceProcAddr( instance, "vkCreateMirSurfaceKHR" );
840 		vkGetPhysicalDeviceMirPresentationSupportKHR = cast( typeof( vkGetPhysicalDeviceMirPresentationSupportKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMirPresentationSupportKHR" );
841 	}
842 
843 	// VK_KHR_android_surface
844 	version( VK_USE_PLATFORM_ANDROID_KHR ) {
845 		vkCreateAndroidSurfaceKHR = cast( typeof( vkCreateAndroidSurfaceKHR )) vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" );
846 	}
847 
848 	// VK_KHR_win32_surface
849 	version( VK_USE_PLATFORM_WIN32_KHR ) {
850 		vkCreateWin32SurfaceKHR = cast( typeof( vkCreateWin32SurfaceKHR )) vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" );
851 		vkGetPhysicalDeviceWin32PresentationSupportKHR = cast( typeof( vkGetPhysicalDeviceWin32PresentationSupportKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR" );
852 	}
853 
854 	// VK_KHR_get_physical_device_properties2
855 	vkGetPhysicalDeviceFeatures2KHR = cast( typeof( vkGetPhysicalDeviceFeatures2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2KHR" );
856 	vkGetPhysicalDeviceProperties2KHR = cast( typeof( vkGetPhysicalDeviceProperties2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2KHR" );
857 	vkGetPhysicalDeviceFormatProperties2KHR = cast( typeof( vkGetPhysicalDeviceFormatProperties2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2KHR" );
858 	vkGetPhysicalDeviceImageFormatProperties2KHR = cast( typeof( vkGetPhysicalDeviceImageFormatProperties2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2KHR" );
859 	vkGetPhysicalDeviceQueueFamilyProperties2KHR = cast( typeof( vkGetPhysicalDeviceQueueFamilyProperties2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR" );
860 	vkGetPhysicalDeviceMemoryProperties2KHR = cast( typeof( vkGetPhysicalDeviceMemoryProperties2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2KHR" );
861 	vkGetPhysicalDeviceSparseImageFormatProperties2KHR = cast( typeof( vkGetPhysicalDeviceSparseImageFormatProperties2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR" );
862 
863 	// VK_KHR_external_memory_capabilities
864 	vkGetPhysicalDeviceExternalBufferPropertiesKHR = cast( typeof( vkGetPhysicalDeviceExternalBufferPropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR" );
865 
866 	// VK_KHR_external_semaphore_capabilities
867 	vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = cast( typeof( vkGetPhysicalDeviceExternalSemaphorePropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR" );
868 
869 	// VK_KHR_external_fence_capabilities
870 	vkGetPhysicalDeviceExternalFencePropertiesKHR = cast( typeof( vkGetPhysicalDeviceExternalFencePropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR" );
871 
872 	// VK_KHR_get_surface_capabilities2
873 	vkGetPhysicalDeviceSurfaceCapabilities2KHR = cast( typeof( vkGetPhysicalDeviceSurfaceCapabilities2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR" );
874 	vkGetPhysicalDeviceSurfaceFormats2KHR = cast( typeof( vkGetPhysicalDeviceSurfaceFormats2KHR )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormats2KHR" );
875 
876 	// VK_EXT_debug_report
877 	vkCreateDebugReportCallbackEXT = cast( typeof( vkCreateDebugReportCallbackEXT )) vkGetInstanceProcAddr( instance, "vkCreateDebugReportCallbackEXT" );
878 	vkDestroyDebugReportCallbackEXT = cast( typeof( vkDestroyDebugReportCallbackEXT )) vkGetInstanceProcAddr( instance, "vkDestroyDebugReportCallbackEXT" );
879 	vkDebugReportMessageEXT = cast( typeof( vkDebugReportMessageEXT )) vkGetInstanceProcAddr( instance, "vkDebugReportMessageEXT" );
880 
881 	// VK_NV_external_memory_capabilities
882 	vkGetPhysicalDeviceExternalImageFormatPropertiesNV = cast( typeof( vkGetPhysicalDeviceExternalImageFormatPropertiesNV )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" );
883 
884 	// VK_KHX_device_group
885 	vkGetPhysicalDevicePresentRectanglesKHX = cast( typeof( vkGetPhysicalDevicePresentRectanglesKHX )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDevicePresentRectanglesKHX" );
886 
887 	// VK_NN_vi_surface
888 	vkCreateViSurfaceNN = cast( typeof( vkCreateViSurfaceNN )) vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" );
889 
890 	// VK_KHX_device_group_creation
891 	vkEnumeratePhysicalDeviceGroupsKHX = cast( typeof( vkEnumeratePhysicalDeviceGroupsKHX )) vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroupsKHX" );
892 
893 	// VK_NVX_device_generated_commands
894 	vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX = cast( typeof( vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX" );
895 
896 	// VK_EXT_direct_mode_display
897 	vkReleaseDisplayEXT = cast( typeof( vkReleaseDisplayEXT )) vkGetInstanceProcAddr( instance, "vkReleaseDisplayEXT" );
898 
899 	// VK_EXT_acquire_xlib_display
900 	version( VK_USE_PLATFORM_XLIB_KHR ) {
901 		vkAcquireXlibDisplayEXT = cast( typeof( vkAcquireXlibDisplayEXT )) vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" );
902 		vkGetRandROutputDisplayEXT = cast( typeof( vkGetRandROutputDisplayEXT )) vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" );
903 	}
904 
905 	// VK_EXT_display_surface_counter
906 	vkGetPhysicalDeviceSurfaceCapabilities2EXT = cast( typeof( vkGetPhysicalDeviceSurfaceCapabilities2EXT )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT" );
907 
908 	// VK_MVK_ios_surface
909 	vkCreateIOSSurfaceMVK = cast( typeof( vkCreateIOSSurfaceMVK )) vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" );
910 
911 	// VK_MVK_macos_surface
912 	vkCreateMacOSSurfaceMVK = cast( typeof( vkCreateMacOSSurfaceMVK )) vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" );
913 
914 	// VK_EXT_sample_locations
915 	vkGetPhysicalDeviceMultisamplePropertiesEXT = cast( typeof( vkGetPhysicalDeviceMultisamplePropertiesEXT )) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT" );
916 }
917 
918 /// with a valid VkInstance call this function to retrieve VkDevice, VkQueue and VkCommandBuffer related functions
919 /// the functions call indirectly through the VkInstance and will be internally dispatched by the implementation
920 /// use loadDeviceLevelFunctions( VkDevice device ) bellow to avoid this indirection and get the pointers directly form a VkDevice
921 void loadDeviceLevelFunctions( VkInstance instance ) {
922 	assert( vkGetInstanceProcAddr !is null, "Must call loadInstanceLevelFunctions before loadDeviceLevelFunctions" );
923 
924 	// VK_VERSION_1_0
925 	vkDestroyDevice = cast( typeof( vkDestroyDevice )) vkGetInstanceProcAddr( instance, "vkDestroyDevice" );
926 	vkGetDeviceQueue = cast( typeof( vkGetDeviceQueue )) vkGetInstanceProcAddr( instance, "vkGetDeviceQueue" );
927 	vkQueueSubmit = cast( typeof( vkQueueSubmit )) vkGetInstanceProcAddr( instance, "vkQueueSubmit" );
928 	vkQueueWaitIdle = cast( typeof( vkQueueWaitIdle )) vkGetInstanceProcAddr( instance, "vkQueueWaitIdle" );
929 	vkDeviceWaitIdle = cast( typeof( vkDeviceWaitIdle )) vkGetInstanceProcAddr( instance, "vkDeviceWaitIdle" );
930 	vkAllocateMemory = cast( typeof( vkAllocateMemory )) vkGetInstanceProcAddr( instance, "vkAllocateMemory" );
931 	vkFreeMemory = cast( typeof( vkFreeMemory )) vkGetInstanceProcAddr( instance, "vkFreeMemory" );
932 	vkMapMemory = cast( typeof( vkMapMemory )) vkGetInstanceProcAddr( instance, "vkMapMemory" );
933 	vkUnmapMemory = cast( typeof( vkUnmapMemory )) vkGetInstanceProcAddr( instance, "vkUnmapMemory" );
934 	vkFlushMappedMemoryRanges = cast( typeof( vkFlushMappedMemoryRanges )) vkGetInstanceProcAddr( instance, "vkFlushMappedMemoryRanges" );
935 	vkInvalidateMappedMemoryRanges = cast( typeof( vkInvalidateMappedMemoryRanges )) vkGetInstanceProcAddr( instance, "vkInvalidateMappedMemoryRanges" );
936 	vkGetDeviceMemoryCommitment = cast( typeof( vkGetDeviceMemoryCommitment )) vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryCommitment" );
937 	vkBindBufferMemory = cast( typeof( vkBindBufferMemory )) vkGetInstanceProcAddr( instance, "vkBindBufferMemory" );
938 	vkBindImageMemory = cast( typeof( vkBindImageMemory )) vkGetInstanceProcAddr( instance, "vkBindImageMemory" );
939 	vkGetBufferMemoryRequirements = cast( typeof( vkGetBufferMemoryRequirements )) vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements" );
940 	vkGetImageMemoryRequirements = cast( typeof( vkGetImageMemoryRequirements )) vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements" );
941 	vkGetImageSparseMemoryRequirements = cast( typeof( vkGetImageSparseMemoryRequirements )) vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements" );
942 	vkQueueBindSparse = cast( typeof( vkQueueBindSparse )) vkGetInstanceProcAddr( instance, "vkQueueBindSparse" );
943 	vkCreateFence = cast( typeof( vkCreateFence )) vkGetInstanceProcAddr( instance, "vkCreateFence" );
944 	vkDestroyFence = cast( typeof( vkDestroyFence )) vkGetInstanceProcAddr( instance, "vkDestroyFence" );
945 	vkResetFences = cast( typeof( vkResetFences )) vkGetInstanceProcAddr( instance, "vkResetFences" );
946 	vkGetFenceStatus = cast( typeof( vkGetFenceStatus )) vkGetInstanceProcAddr( instance, "vkGetFenceStatus" );
947 	vkWaitForFences = cast( typeof( vkWaitForFences )) vkGetInstanceProcAddr( instance, "vkWaitForFences" );
948 	vkCreateSemaphore = cast( typeof( vkCreateSemaphore )) vkGetInstanceProcAddr( instance, "vkCreateSemaphore" );
949 	vkDestroySemaphore = cast( typeof( vkDestroySemaphore )) vkGetInstanceProcAddr( instance, "vkDestroySemaphore" );
950 	vkCreateEvent = cast( typeof( vkCreateEvent )) vkGetInstanceProcAddr( instance, "vkCreateEvent" );
951 	vkDestroyEvent = cast( typeof( vkDestroyEvent )) vkGetInstanceProcAddr( instance, "vkDestroyEvent" );
952 	vkGetEventStatus = cast( typeof( vkGetEventStatus )) vkGetInstanceProcAddr( instance, "vkGetEventStatus" );
953 	vkSetEvent = cast( typeof( vkSetEvent )) vkGetInstanceProcAddr( instance, "vkSetEvent" );
954 	vkResetEvent = cast( typeof( vkResetEvent )) vkGetInstanceProcAddr( instance, "vkResetEvent" );
955 	vkCreateQueryPool = cast( typeof( vkCreateQueryPool )) vkGetInstanceProcAddr( instance, "vkCreateQueryPool" );
956 	vkDestroyQueryPool = cast( typeof( vkDestroyQueryPool )) vkGetInstanceProcAddr( instance, "vkDestroyQueryPool" );
957 	vkGetQueryPoolResults = cast( typeof( vkGetQueryPoolResults )) vkGetInstanceProcAddr( instance, "vkGetQueryPoolResults" );
958 	vkCreateBuffer = cast( typeof( vkCreateBuffer )) vkGetInstanceProcAddr( instance, "vkCreateBuffer" );
959 	vkDestroyBuffer = cast( typeof( vkDestroyBuffer )) vkGetInstanceProcAddr( instance, "vkDestroyBuffer" );
960 	vkCreateBufferView = cast( typeof( vkCreateBufferView )) vkGetInstanceProcAddr( instance, "vkCreateBufferView" );
961 	vkDestroyBufferView = cast( typeof( vkDestroyBufferView )) vkGetInstanceProcAddr( instance, "vkDestroyBufferView" );
962 	vkCreateImage = cast( typeof( vkCreateImage )) vkGetInstanceProcAddr( instance, "vkCreateImage" );
963 	vkDestroyImage = cast( typeof( vkDestroyImage )) vkGetInstanceProcAddr( instance, "vkDestroyImage" );
964 	vkGetImageSubresourceLayout = cast( typeof( vkGetImageSubresourceLayout )) vkGetInstanceProcAddr( instance, "vkGetImageSubresourceLayout" );
965 	vkCreateImageView = cast( typeof( vkCreateImageView )) vkGetInstanceProcAddr( instance, "vkCreateImageView" );
966 	vkDestroyImageView = cast( typeof( vkDestroyImageView )) vkGetInstanceProcAddr( instance, "vkDestroyImageView" );
967 	vkCreateShaderModule = cast( typeof( vkCreateShaderModule )) vkGetInstanceProcAddr( instance, "vkCreateShaderModule" );
968 	vkDestroyShaderModule = cast( typeof( vkDestroyShaderModule )) vkGetInstanceProcAddr( instance, "vkDestroyShaderModule" );
969 	vkCreatePipelineCache = cast( typeof( vkCreatePipelineCache )) vkGetInstanceProcAddr( instance, "vkCreatePipelineCache" );
970 	vkDestroyPipelineCache = cast( typeof( vkDestroyPipelineCache )) vkGetInstanceProcAddr( instance, "vkDestroyPipelineCache" );
971 	vkGetPipelineCacheData = cast( typeof( vkGetPipelineCacheData )) vkGetInstanceProcAddr( instance, "vkGetPipelineCacheData" );
972 	vkMergePipelineCaches = cast( typeof( vkMergePipelineCaches )) vkGetInstanceProcAddr( instance, "vkMergePipelineCaches" );
973 	vkCreateGraphicsPipelines = cast( typeof( vkCreateGraphicsPipelines )) vkGetInstanceProcAddr( instance, "vkCreateGraphicsPipelines" );
974 	vkCreateComputePipelines = cast( typeof( vkCreateComputePipelines )) vkGetInstanceProcAddr( instance, "vkCreateComputePipelines" );
975 	vkDestroyPipeline = cast( typeof( vkDestroyPipeline )) vkGetInstanceProcAddr( instance, "vkDestroyPipeline" );
976 	vkCreatePipelineLayout = cast( typeof( vkCreatePipelineLayout )) vkGetInstanceProcAddr( instance, "vkCreatePipelineLayout" );
977 	vkDestroyPipelineLayout = cast( typeof( vkDestroyPipelineLayout )) vkGetInstanceProcAddr( instance, "vkDestroyPipelineLayout" );
978 	vkCreateSampler = cast( typeof( vkCreateSampler )) vkGetInstanceProcAddr( instance, "vkCreateSampler" );
979 	vkDestroySampler = cast( typeof( vkDestroySampler )) vkGetInstanceProcAddr( instance, "vkDestroySampler" );
980 	vkCreateDescriptorSetLayout = cast( typeof( vkCreateDescriptorSetLayout )) vkGetInstanceProcAddr( instance, "vkCreateDescriptorSetLayout" );
981 	vkDestroyDescriptorSetLayout = cast( typeof( vkDestroyDescriptorSetLayout )) vkGetInstanceProcAddr( instance, "vkDestroyDescriptorSetLayout" );
982 	vkCreateDescriptorPool = cast( typeof( vkCreateDescriptorPool )) vkGetInstanceProcAddr( instance, "vkCreateDescriptorPool" );
983 	vkDestroyDescriptorPool = cast( typeof( vkDestroyDescriptorPool )) vkGetInstanceProcAddr( instance, "vkDestroyDescriptorPool" );
984 	vkResetDescriptorPool = cast( typeof( vkResetDescriptorPool )) vkGetInstanceProcAddr( instance, "vkResetDescriptorPool" );
985 	vkAllocateDescriptorSets = cast( typeof( vkAllocateDescriptorSets )) vkGetInstanceProcAddr( instance, "vkAllocateDescriptorSets" );
986 	vkFreeDescriptorSets = cast( typeof( vkFreeDescriptorSets )) vkGetInstanceProcAddr( instance, "vkFreeDescriptorSets" );
987 	vkUpdateDescriptorSets = cast( typeof( vkUpdateDescriptorSets )) vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSets" );
988 	vkCreateFramebuffer = cast( typeof( vkCreateFramebuffer )) vkGetInstanceProcAddr( instance, "vkCreateFramebuffer" );
989 	vkDestroyFramebuffer = cast( typeof( vkDestroyFramebuffer )) vkGetInstanceProcAddr( instance, "vkDestroyFramebuffer" );
990 	vkCreateRenderPass = cast( typeof( vkCreateRenderPass )) vkGetInstanceProcAddr( instance, "vkCreateRenderPass" );
991 	vkDestroyRenderPass = cast( typeof( vkDestroyRenderPass )) vkGetInstanceProcAddr( instance, "vkDestroyRenderPass" );
992 	vkGetRenderAreaGranularity = cast( typeof( vkGetRenderAreaGranularity )) vkGetInstanceProcAddr( instance, "vkGetRenderAreaGranularity" );
993 	vkCreateCommandPool = cast( typeof( vkCreateCommandPool )) vkGetInstanceProcAddr( instance, "vkCreateCommandPool" );
994 	vkDestroyCommandPool = cast( typeof( vkDestroyCommandPool )) vkGetInstanceProcAddr( instance, "vkDestroyCommandPool" );
995 	vkResetCommandPool = cast( typeof( vkResetCommandPool )) vkGetInstanceProcAddr( instance, "vkResetCommandPool" );
996 	vkAllocateCommandBuffers = cast( typeof( vkAllocateCommandBuffers )) vkGetInstanceProcAddr( instance, "vkAllocateCommandBuffers" );
997 	vkFreeCommandBuffers = cast( typeof( vkFreeCommandBuffers )) vkGetInstanceProcAddr( instance, "vkFreeCommandBuffers" );
998 	vkBeginCommandBuffer = cast( typeof( vkBeginCommandBuffer )) vkGetInstanceProcAddr( instance, "vkBeginCommandBuffer" );
999 	vkEndCommandBuffer = cast( typeof( vkEndCommandBuffer )) vkGetInstanceProcAddr( instance, "vkEndCommandBuffer" );
1000 	vkResetCommandBuffer = cast( typeof( vkResetCommandBuffer )) vkGetInstanceProcAddr( instance, "vkResetCommandBuffer" );
1001 	vkCmdBindPipeline = cast( typeof( vkCmdBindPipeline )) vkGetInstanceProcAddr( instance, "vkCmdBindPipeline" );
1002 	vkCmdSetViewport = cast( typeof( vkCmdSetViewport )) vkGetInstanceProcAddr( instance, "vkCmdSetViewport" );
1003 	vkCmdSetScissor = cast( typeof( vkCmdSetScissor )) vkGetInstanceProcAddr( instance, "vkCmdSetScissor" );
1004 	vkCmdSetLineWidth = cast( typeof( vkCmdSetLineWidth )) vkGetInstanceProcAddr( instance, "vkCmdSetLineWidth" );
1005 	vkCmdSetDepthBias = cast( typeof( vkCmdSetDepthBias )) vkGetInstanceProcAddr( instance, "vkCmdSetDepthBias" );
1006 	vkCmdSetBlendConstants = cast( typeof( vkCmdSetBlendConstants )) vkGetInstanceProcAddr( instance, "vkCmdSetBlendConstants" );
1007 	vkCmdSetDepthBounds = cast( typeof( vkCmdSetDepthBounds )) vkGetInstanceProcAddr( instance, "vkCmdSetDepthBounds" );
1008 	vkCmdSetStencilCompareMask = cast( typeof( vkCmdSetStencilCompareMask )) vkGetInstanceProcAddr( instance, "vkCmdSetStencilCompareMask" );
1009 	vkCmdSetStencilWriteMask = cast( typeof( vkCmdSetStencilWriteMask )) vkGetInstanceProcAddr( instance, "vkCmdSetStencilWriteMask" );
1010 	vkCmdSetStencilReference = cast( typeof( vkCmdSetStencilReference )) vkGetInstanceProcAddr( instance, "vkCmdSetStencilReference" );
1011 	vkCmdBindDescriptorSets = cast( typeof( vkCmdBindDescriptorSets )) vkGetInstanceProcAddr( instance, "vkCmdBindDescriptorSets" );
1012 	vkCmdBindIndexBuffer = cast( typeof( vkCmdBindIndexBuffer )) vkGetInstanceProcAddr( instance, "vkCmdBindIndexBuffer" );
1013 	vkCmdBindVertexBuffers = cast( typeof( vkCmdBindVertexBuffers )) vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers" );
1014 	vkCmdDraw = cast( typeof( vkCmdDraw )) vkGetInstanceProcAddr( instance, "vkCmdDraw" );
1015 	vkCmdDrawIndexed = cast( typeof( vkCmdDrawIndexed )) vkGetInstanceProcAddr( instance, "vkCmdDrawIndexed" );
1016 	vkCmdDrawIndirect = cast( typeof( vkCmdDrawIndirect )) vkGetInstanceProcAddr( instance, "vkCmdDrawIndirect" );
1017 	vkCmdDrawIndexedIndirect = cast( typeof( vkCmdDrawIndexedIndirect )) vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirect" );
1018 	vkCmdDispatch = cast( typeof( vkCmdDispatch )) vkGetInstanceProcAddr( instance, "vkCmdDispatch" );
1019 	vkCmdDispatchIndirect = cast( typeof( vkCmdDispatchIndirect )) vkGetInstanceProcAddr( instance, "vkCmdDispatchIndirect" );
1020 	vkCmdCopyBuffer = cast( typeof( vkCmdCopyBuffer )) vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer" );
1021 	vkCmdCopyImage = cast( typeof( vkCmdCopyImage )) vkGetInstanceProcAddr( instance, "vkCmdCopyImage" );
1022 	vkCmdBlitImage = cast( typeof( vkCmdBlitImage )) vkGetInstanceProcAddr( instance, "vkCmdBlitImage" );
1023 	vkCmdCopyBufferToImage = cast( typeof( vkCmdCopyBufferToImage )) vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage" );
1024 	vkCmdCopyImageToBuffer = cast( typeof( vkCmdCopyImageToBuffer )) vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer" );
1025 	vkCmdUpdateBuffer = cast( typeof( vkCmdUpdateBuffer )) vkGetInstanceProcAddr( instance, "vkCmdUpdateBuffer" );
1026 	vkCmdFillBuffer = cast( typeof( vkCmdFillBuffer )) vkGetInstanceProcAddr( instance, "vkCmdFillBuffer" );
1027 	vkCmdClearColorImage = cast( typeof( vkCmdClearColorImage )) vkGetInstanceProcAddr( instance, "vkCmdClearColorImage" );
1028 	vkCmdClearDepthStencilImage = cast( typeof( vkCmdClearDepthStencilImage )) vkGetInstanceProcAddr( instance, "vkCmdClearDepthStencilImage" );
1029 	vkCmdClearAttachments = cast( typeof( vkCmdClearAttachments )) vkGetInstanceProcAddr( instance, "vkCmdClearAttachments" );
1030 	vkCmdResolveImage = cast( typeof( vkCmdResolveImage )) vkGetInstanceProcAddr( instance, "vkCmdResolveImage" );
1031 	vkCmdSetEvent = cast( typeof( vkCmdSetEvent )) vkGetInstanceProcAddr( instance, "vkCmdSetEvent" );
1032 	vkCmdResetEvent = cast( typeof( vkCmdResetEvent )) vkGetInstanceProcAddr( instance, "vkCmdResetEvent" );
1033 	vkCmdWaitEvents = cast( typeof( vkCmdWaitEvents )) vkGetInstanceProcAddr( instance, "vkCmdWaitEvents" );
1034 	vkCmdPipelineBarrier = cast( typeof( vkCmdPipelineBarrier )) vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier" );
1035 	vkCmdBeginQuery = cast( typeof( vkCmdBeginQuery )) vkGetInstanceProcAddr( instance, "vkCmdBeginQuery" );
1036 	vkCmdEndQuery = cast( typeof( vkCmdEndQuery )) vkGetInstanceProcAddr( instance, "vkCmdEndQuery" );
1037 	vkCmdResetQueryPool = cast( typeof( vkCmdResetQueryPool )) vkGetInstanceProcAddr( instance, "vkCmdResetQueryPool" );
1038 	vkCmdWriteTimestamp = cast( typeof( vkCmdWriteTimestamp )) vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp" );
1039 	vkCmdCopyQueryPoolResults = cast( typeof( vkCmdCopyQueryPoolResults )) vkGetInstanceProcAddr( instance, "vkCmdCopyQueryPoolResults" );
1040 	vkCmdPushConstants = cast( typeof( vkCmdPushConstants )) vkGetInstanceProcAddr( instance, "vkCmdPushConstants" );
1041 	vkCmdBeginRenderPass = cast( typeof( vkCmdBeginRenderPass )) vkGetInstanceProcAddr( instance, "vkCmdBeginRenderPass" );
1042 	vkCmdNextSubpass = cast( typeof( vkCmdNextSubpass )) vkGetInstanceProcAddr( instance, "vkCmdNextSubpass" );
1043 	vkCmdEndRenderPass = cast( typeof( vkCmdEndRenderPass )) vkGetInstanceProcAddr( instance, "vkCmdEndRenderPass" );
1044 	vkCmdExecuteCommands = cast( typeof( vkCmdExecuteCommands )) vkGetInstanceProcAddr( instance, "vkCmdExecuteCommands" );
1045 
1046 	// VK_KHR_swapchain
1047 	vkCreateSwapchainKHR = cast( typeof( vkCreateSwapchainKHR )) vkGetInstanceProcAddr( instance, "vkCreateSwapchainKHR" );
1048 	vkDestroySwapchainKHR = cast( typeof( vkDestroySwapchainKHR )) vkGetInstanceProcAddr( instance, "vkDestroySwapchainKHR" );
1049 	vkGetSwapchainImagesKHR = cast( typeof( vkGetSwapchainImagesKHR )) vkGetInstanceProcAddr( instance, "vkGetSwapchainImagesKHR" );
1050 	vkAcquireNextImageKHR = cast( typeof( vkAcquireNextImageKHR )) vkGetInstanceProcAddr( instance, "vkAcquireNextImageKHR" );
1051 	vkQueuePresentKHR = cast( typeof( vkQueuePresentKHR )) vkGetInstanceProcAddr( instance, "vkQueuePresentKHR" );
1052 
1053 	// VK_KHR_display_swapchain
1054 	vkCreateSharedSwapchainsKHR = cast( typeof( vkCreateSharedSwapchainsKHR )) vkGetInstanceProcAddr( instance, "vkCreateSharedSwapchainsKHR" );
1055 
1056 	// VK_KHR_maintenance1
1057 	vkTrimCommandPoolKHR = cast( typeof( vkTrimCommandPoolKHR )) vkGetInstanceProcAddr( instance, "vkTrimCommandPoolKHR" );
1058 
1059 	// VK_KHR_external_memory_win32
1060 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1061 		vkGetMemoryWin32HandleKHR = cast( typeof( vkGetMemoryWin32HandleKHR )) vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleKHR" );
1062 		vkGetMemoryWin32HandlePropertiesKHR = cast( typeof( vkGetMemoryWin32HandlePropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandlePropertiesKHR" );
1063 	}
1064 
1065 	// VK_KHR_external_memory_fd
1066 	vkGetMemoryFdKHR = cast( typeof( vkGetMemoryFdKHR )) vkGetInstanceProcAddr( instance, "vkGetMemoryFdKHR" );
1067 	vkGetMemoryFdPropertiesKHR = cast( typeof( vkGetMemoryFdPropertiesKHR )) vkGetInstanceProcAddr( instance, "vkGetMemoryFdPropertiesKHR" );
1068 
1069 	// VK_KHR_external_semaphore_win32
1070 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1071 		vkImportSemaphoreWin32HandleKHR = cast( typeof( vkImportSemaphoreWin32HandleKHR )) vkGetInstanceProcAddr( instance, "vkImportSemaphoreWin32HandleKHR" );
1072 		vkGetSemaphoreWin32HandleKHR = cast( typeof( vkGetSemaphoreWin32HandleKHR )) vkGetInstanceProcAddr( instance, "vkGetSemaphoreWin32HandleKHR" );
1073 	}
1074 
1075 	// VK_KHR_external_semaphore_fd
1076 	vkImportSemaphoreFdKHR = cast( typeof( vkImportSemaphoreFdKHR )) vkGetInstanceProcAddr( instance, "vkImportSemaphoreFdKHR" );
1077 	vkGetSemaphoreFdKHR = cast( typeof( vkGetSemaphoreFdKHR )) vkGetInstanceProcAddr( instance, "vkGetSemaphoreFdKHR" );
1078 
1079 	// VK_KHR_push_descriptor
1080 	vkCmdPushDescriptorSetKHR = cast( typeof( vkCmdPushDescriptorSetKHR )) vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetKHR" );
1081 
1082 	// VK_KHR_descriptor_update_template
1083 	vkCreateDescriptorUpdateTemplateKHR = cast( typeof( vkCreateDescriptorUpdateTemplateKHR )) vkGetInstanceProcAddr( instance, "vkCreateDescriptorUpdateTemplateKHR" );
1084 	vkDestroyDescriptorUpdateTemplateKHR = cast( typeof( vkDestroyDescriptorUpdateTemplateKHR )) vkGetInstanceProcAddr( instance, "vkDestroyDescriptorUpdateTemplateKHR" );
1085 	vkUpdateDescriptorSetWithTemplateKHR = cast( typeof( vkUpdateDescriptorSetWithTemplateKHR )) vkGetInstanceProcAddr( instance, "vkUpdateDescriptorSetWithTemplateKHR" );
1086 	vkCmdPushDescriptorSetWithTemplateKHR = cast( typeof( vkCmdPushDescriptorSetWithTemplateKHR )) vkGetInstanceProcAddr( instance, "vkCmdPushDescriptorSetWithTemplateKHR" );
1087 
1088 	// VK_KHR_shared_presentable_image
1089 	vkGetSwapchainStatusKHR = cast( typeof( vkGetSwapchainStatusKHR )) vkGetInstanceProcAddr( instance, "vkGetSwapchainStatusKHR" );
1090 
1091 	// VK_KHR_external_fence_win32
1092 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1093 		vkImportFenceWin32HandleKHR = cast( typeof( vkImportFenceWin32HandleKHR )) vkGetInstanceProcAddr( instance, "vkImportFenceWin32HandleKHR" );
1094 		vkGetFenceWin32HandleKHR = cast( typeof( vkGetFenceWin32HandleKHR )) vkGetInstanceProcAddr( instance, "vkGetFenceWin32HandleKHR" );
1095 	}
1096 
1097 	// VK_KHR_external_fence_fd
1098 	vkImportFenceFdKHR = cast( typeof( vkImportFenceFdKHR )) vkGetInstanceProcAddr( instance, "vkImportFenceFdKHR" );
1099 	vkGetFenceFdKHR = cast( typeof( vkGetFenceFdKHR )) vkGetInstanceProcAddr( instance, "vkGetFenceFdKHR" );
1100 
1101 	// VK_KHR_get_memory_requirements2
1102 	vkGetImageMemoryRequirements2KHR = cast( typeof( vkGetImageMemoryRequirements2KHR )) vkGetInstanceProcAddr( instance, "vkGetImageMemoryRequirements2KHR" );
1103 	vkGetBufferMemoryRequirements2KHR = cast( typeof( vkGetBufferMemoryRequirements2KHR )) vkGetInstanceProcAddr( instance, "vkGetBufferMemoryRequirements2KHR" );
1104 	vkGetImageSparseMemoryRequirements2KHR = cast( typeof( vkGetImageSparseMemoryRequirements2KHR )) vkGetInstanceProcAddr( instance, "vkGetImageSparseMemoryRequirements2KHR" );
1105 
1106 	// VK_KHR_sampler_ycbcr_conversion
1107 	vkCreateSamplerYcbcrConversionKHR = cast( typeof( vkCreateSamplerYcbcrConversionKHR )) vkGetInstanceProcAddr( instance, "vkCreateSamplerYcbcrConversionKHR" );
1108 	vkDestroySamplerYcbcrConversionKHR = cast( typeof( vkDestroySamplerYcbcrConversionKHR )) vkGetInstanceProcAddr( instance, "vkDestroySamplerYcbcrConversionKHR" );
1109 
1110 	// VK_KHR_bind_memory2
1111 	vkBindBufferMemory2KHR = cast( typeof( vkBindBufferMemory2KHR )) vkGetInstanceProcAddr( instance, "vkBindBufferMemory2KHR" );
1112 	vkBindImageMemory2KHR = cast( typeof( vkBindImageMemory2KHR )) vkGetInstanceProcAddr( instance, "vkBindImageMemory2KHR" );
1113 
1114 	// VK_ANDROID_native_buffer
1115 	vkGetSwapchainGrallocUsageANDROID = cast( typeof( vkGetSwapchainGrallocUsageANDROID )) vkGetInstanceProcAddr( instance, "vkGetSwapchainGrallocUsageANDROID" );
1116 	vkAcquireImageANDROID = cast( typeof( vkAcquireImageANDROID )) vkGetInstanceProcAddr( instance, "vkAcquireImageANDROID" );
1117 	vkQueueSignalReleaseImageANDROID = cast( typeof( vkQueueSignalReleaseImageANDROID )) vkGetInstanceProcAddr( instance, "vkQueueSignalReleaseImageANDROID" );
1118 
1119 	// VK_EXT_debug_marker
1120 	vkDebugMarkerSetObjectTagEXT = cast( typeof( vkDebugMarkerSetObjectTagEXT )) vkGetInstanceProcAddr( instance, "vkDebugMarkerSetObjectTagEXT" );
1121 	vkDebugMarkerSetObjectNameEXT = cast( typeof( vkDebugMarkerSetObjectNameEXT )) vkGetInstanceProcAddr( instance, "vkDebugMarkerSetObjectNameEXT" );
1122 	vkCmdDebugMarkerBeginEXT = cast( typeof( vkCmdDebugMarkerBeginEXT )) vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerBeginEXT" );
1123 	vkCmdDebugMarkerEndEXT = cast( typeof( vkCmdDebugMarkerEndEXT )) vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerEndEXT" );
1124 	vkCmdDebugMarkerInsertEXT = cast( typeof( vkCmdDebugMarkerInsertEXT )) vkGetInstanceProcAddr( instance, "vkCmdDebugMarkerInsertEXT" );
1125 
1126 	// VK_AMD_draw_indirect_count
1127 	vkCmdDrawIndirectCountAMD = cast( typeof( vkCmdDrawIndirectCountAMD )) vkGetInstanceProcAddr( instance, "vkCmdDrawIndirectCountAMD" );
1128 	vkCmdDrawIndexedIndirectCountAMD = cast( typeof( vkCmdDrawIndexedIndirectCountAMD )) vkGetInstanceProcAddr( instance, "vkCmdDrawIndexedIndirectCountAMD" );
1129 
1130 	// VK_NV_external_memory_win32
1131 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1132 		vkGetMemoryWin32HandleNV = cast( typeof( vkGetMemoryWin32HandleNV )) vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleNV" );
1133 	}
1134 
1135 	// VK_KHX_device_group
1136 	vkGetDeviceGroupPeerMemoryFeaturesKHX = cast( typeof( vkGetDeviceGroupPeerMemoryFeaturesKHX )) vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPeerMemoryFeaturesKHX" );
1137 	vkCmdSetDeviceMaskKHX = cast( typeof( vkCmdSetDeviceMaskKHX )) vkGetInstanceProcAddr( instance, "vkCmdSetDeviceMaskKHX" );
1138 	vkCmdDispatchBaseKHX = cast( typeof( vkCmdDispatchBaseKHX )) vkGetInstanceProcAddr( instance, "vkCmdDispatchBaseKHX" );
1139 	vkGetDeviceGroupPresentCapabilitiesKHX = cast( typeof( vkGetDeviceGroupPresentCapabilitiesKHX )) vkGetInstanceProcAddr( instance, "vkGetDeviceGroupPresentCapabilitiesKHX" );
1140 	vkGetDeviceGroupSurfacePresentModesKHX = cast( typeof( vkGetDeviceGroupSurfacePresentModesKHX )) vkGetInstanceProcAddr( instance, "vkGetDeviceGroupSurfacePresentModesKHX" );
1141 	vkAcquireNextImage2KHX = cast( typeof( vkAcquireNextImage2KHX )) vkGetInstanceProcAddr( instance, "vkAcquireNextImage2KHX" );
1142 
1143 	// VK_NVX_device_generated_commands
1144 	vkCmdProcessCommandsNVX = cast( typeof( vkCmdProcessCommandsNVX )) vkGetInstanceProcAddr( instance, "vkCmdProcessCommandsNVX" );
1145 	vkCmdReserveSpaceForCommandsNVX = cast( typeof( vkCmdReserveSpaceForCommandsNVX )) vkGetInstanceProcAddr( instance, "vkCmdReserveSpaceForCommandsNVX" );
1146 	vkCreateIndirectCommandsLayoutNVX = cast( typeof( vkCreateIndirectCommandsLayoutNVX )) vkGetInstanceProcAddr( instance, "vkCreateIndirectCommandsLayoutNVX" );
1147 	vkDestroyIndirectCommandsLayoutNVX = cast( typeof( vkDestroyIndirectCommandsLayoutNVX )) vkGetInstanceProcAddr( instance, "vkDestroyIndirectCommandsLayoutNVX" );
1148 	vkCreateObjectTableNVX = cast( typeof( vkCreateObjectTableNVX )) vkGetInstanceProcAddr( instance, "vkCreateObjectTableNVX" );
1149 	vkDestroyObjectTableNVX = cast( typeof( vkDestroyObjectTableNVX )) vkGetInstanceProcAddr( instance, "vkDestroyObjectTableNVX" );
1150 	vkRegisterObjectsNVX = cast( typeof( vkRegisterObjectsNVX )) vkGetInstanceProcAddr( instance, "vkRegisterObjectsNVX" );
1151 	vkUnregisterObjectsNVX = cast( typeof( vkUnregisterObjectsNVX )) vkGetInstanceProcAddr( instance, "vkUnregisterObjectsNVX" );
1152 
1153 	// VK_NV_clip_space_w_scaling
1154 	vkCmdSetViewportWScalingNV = cast( typeof( vkCmdSetViewportWScalingNV )) vkGetInstanceProcAddr( instance, "vkCmdSetViewportWScalingNV" );
1155 
1156 	// VK_EXT_display_control
1157 	vkDisplayPowerControlEXT = cast( typeof( vkDisplayPowerControlEXT )) vkGetInstanceProcAddr( instance, "vkDisplayPowerControlEXT" );
1158 	vkRegisterDeviceEventEXT = cast( typeof( vkRegisterDeviceEventEXT )) vkGetInstanceProcAddr( instance, "vkRegisterDeviceEventEXT" );
1159 	vkRegisterDisplayEventEXT = cast( typeof( vkRegisterDisplayEventEXT )) vkGetInstanceProcAddr( instance, "vkRegisterDisplayEventEXT" );
1160 	vkGetSwapchainCounterEXT = cast( typeof( vkGetSwapchainCounterEXT )) vkGetInstanceProcAddr( instance, "vkGetSwapchainCounterEXT" );
1161 
1162 	// VK_GOOGLE_display_timing
1163 	vkGetRefreshCycleDurationGOOGLE = cast( typeof( vkGetRefreshCycleDurationGOOGLE )) vkGetInstanceProcAddr( instance, "vkGetRefreshCycleDurationGOOGLE" );
1164 	vkGetPastPresentationTimingGOOGLE = cast( typeof( vkGetPastPresentationTimingGOOGLE )) vkGetInstanceProcAddr( instance, "vkGetPastPresentationTimingGOOGLE" );
1165 
1166 	// VK_EXT_discard_rectangles
1167 	vkCmdSetDiscardRectangleEXT = cast( typeof( vkCmdSetDiscardRectangleEXT )) vkGetInstanceProcAddr( instance, "vkCmdSetDiscardRectangleEXT" );
1168 
1169 	// VK_EXT_hdr_metadata
1170 	vkSetHdrMetadataEXT = cast( typeof( vkSetHdrMetadataEXT )) vkGetInstanceProcAddr( instance, "vkSetHdrMetadataEXT" );
1171 
1172 	// VK_EXT_sample_locations
1173 	vkCmdSetSampleLocationsEXT = cast( typeof( vkCmdSetSampleLocationsEXT )) vkGetInstanceProcAddr( instance, "vkCmdSetSampleLocationsEXT" );
1174 
1175 	// VK_EXT_validation_cache
1176 	vkCreateValidationCacheEXT = cast( typeof( vkCreateValidationCacheEXT )) vkGetInstanceProcAddr( instance, "vkCreateValidationCacheEXT" );
1177 	vkDestroyValidationCacheEXT = cast( typeof( vkDestroyValidationCacheEXT )) vkGetInstanceProcAddr( instance, "vkDestroyValidationCacheEXT" );
1178 	vkMergeValidationCachesEXT = cast( typeof( vkMergeValidationCachesEXT )) vkGetInstanceProcAddr( instance, "vkMergeValidationCachesEXT" );
1179 	vkGetValidationCacheDataEXT = cast( typeof( vkGetValidationCacheDataEXT )) vkGetInstanceProcAddr( instance, "vkGetValidationCacheDataEXT" );
1180 }
1181 
1182 /// with a valid VkDevice call this function to retrieve VkDevice, VkQueue and VkCommandBuffer related functions
1183 /// the functions call directly VkDevice and related resources and can be retrieved for one and only one VkDevice
1184 /// calling this function again with another VkDevices will overwrite the __gshared functions retrieved previously
1185 /// use createGroupedDeviceLevelFunctions bellow if usage of multiple VkDevices is required
1186 void loadDeviceLevelFunctions( VkDevice device ) {
1187 	assert( vkGetDeviceProcAddr !is null, "Must call loadInstanceLevelFunctions before loadDeviceLevelFunctions" );
1188 
1189 	// VK_VERSION_1_0
1190 	vkDestroyDevice = cast( typeof( vkDestroyDevice )) vkGetDeviceProcAddr( device, "vkDestroyDevice" );
1191 	vkGetDeviceQueue = cast( typeof( vkGetDeviceQueue )) vkGetDeviceProcAddr( device, "vkGetDeviceQueue" );
1192 	vkQueueSubmit = cast( typeof( vkQueueSubmit )) vkGetDeviceProcAddr( device, "vkQueueSubmit" );
1193 	vkQueueWaitIdle = cast( typeof( vkQueueWaitIdle )) vkGetDeviceProcAddr( device, "vkQueueWaitIdle" );
1194 	vkDeviceWaitIdle = cast( typeof( vkDeviceWaitIdle )) vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" );
1195 	vkAllocateMemory = cast( typeof( vkAllocateMemory )) vkGetDeviceProcAddr( device, "vkAllocateMemory" );
1196 	vkFreeMemory = cast( typeof( vkFreeMemory )) vkGetDeviceProcAddr( device, "vkFreeMemory" );
1197 	vkMapMemory = cast( typeof( vkMapMemory )) vkGetDeviceProcAddr( device, "vkMapMemory" );
1198 	vkUnmapMemory = cast( typeof( vkUnmapMemory )) vkGetDeviceProcAddr( device, "vkUnmapMemory" );
1199 	vkFlushMappedMemoryRanges = cast( typeof( vkFlushMappedMemoryRanges )) vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" );
1200 	vkInvalidateMappedMemoryRanges = cast( typeof( vkInvalidateMappedMemoryRanges )) vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" );
1201 	vkGetDeviceMemoryCommitment = cast( typeof( vkGetDeviceMemoryCommitment )) vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" );
1202 	vkBindBufferMemory = cast( typeof( vkBindBufferMemory )) vkGetDeviceProcAddr( device, "vkBindBufferMemory" );
1203 	vkBindImageMemory = cast( typeof( vkBindImageMemory )) vkGetDeviceProcAddr( device, "vkBindImageMemory" );
1204 	vkGetBufferMemoryRequirements = cast( typeof( vkGetBufferMemoryRequirements )) vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" );
1205 	vkGetImageMemoryRequirements = cast( typeof( vkGetImageMemoryRequirements )) vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" );
1206 	vkGetImageSparseMemoryRequirements = cast( typeof( vkGetImageSparseMemoryRequirements )) vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" );
1207 	vkQueueBindSparse = cast( typeof( vkQueueBindSparse )) vkGetDeviceProcAddr( device, "vkQueueBindSparse" );
1208 	vkCreateFence = cast( typeof( vkCreateFence )) vkGetDeviceProcAddr( device, "vkCreateFence" );
1209 	vkDestroyFence = cast( typeof( vkDestroyFence )) vkGetDeviceProcAddr( device, "vkDestroyFence" );
1210 	vkResetFences = cast( typeof( vkResetFences )) vkGetDeviceProcAddr( device, "vkResetFences" );
1211 	vkGetFenceStatus = cast( typeof( vkGetFenceStatus )) vkGetDeviceProcAddr( device, "vkGetFenceStatus" );
1212 	vkWaitForFences = cast( typeof( vkWaitForFences )) vkGetDeviceProcAddr( device, "vkWaitForFences" );
1213 	vkCreateSemaphore = cast( typeof( vkCreateSemaphore )) vkGetDeviceProcAddr( device, "vkCreateSemaphore" );
1214 	vkDestroySemaphore = cast( typeof( vkDestroySemaphore )) vkGetDeviceProcAddr( device, "vkDestroySemaphore" );
1215 	vkCreateEvent = cast( typeof( vkCreateEvent )) vkGetDeviceProcAddr( device, "vkCreateEvent" );
1216 	vkDestroyEvent = cast( typeof( vkDestroyEvent )) vkGetDeviceProcAddr( device, "vkDestroyEvent" );
1217 	vkGetEventStatus = cast( typeof( vkGetEventStatus )) vkGetDeviceProcAddr( device, "vkGetEventStatus" );
1218 	vkSetEvent = cast( typeof( vkSetEvent )) vkGetDeviceProcAddr( device, "vkSetEvent" );
1219 	vkResetEvent = cast( typeof( vkResetEvent )) vkGetDeviceProcAddr( device, "vkResetEvent" );
1220 	vkCreateQueryPool = cast( typeof( vkCreateQueryPool )) vkGetDeviceProcAddr( device, "vkCreateQueryPool" );
1221 	vkDestroyQueryPool = cast( typeof( vkDestroyQueryPool )) vkGetDeviceProcAddr( device, "vkDestroyQueryPool" );
1222 	vkGetQueryPoolResults = cast( typeof( vkGetQueryPoolResults )) vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" );
1223 	vkCreateBuffer = cast( typeof( vkCreateBuffer )) vkGetDeviceProcAddr( device, "vkCreateBuffer" );
1224 	vkDestroyBuffer = cast( typeof( vkDestroyBuffer )) vkGetDeviceProcAddr( device, "vkDestroyBuffer" );
1225 	vkCreateBufferView = cast( typeof( vkCreateBufferView )) vkGetDeviceProcAddr( device, "vkCreateBufferView" );
1226 	vkDestroyBufferView = cast( typeof( vkDestroyBufferView )) vkGetDeviceProcAddr( device, "vkDestroyBufferView" );
1227 	vkCreateImage = cast( typeof( vkCreateImage )) vkGetDeviceProcAddr( device, "vkCreateImage" );
1228 	vkDestroyImage = cast( typeof( vkDestroyImage )) vkGetDeviceProcAddr( device, "vkDestroyImage" );
1229 	vkGetImageSubresourceLayout = cast( typeof( vkGetImageSubresourceLayout )) vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" );
1230 	vkCreateImageView = cast( typeof( vkCreateImageView )) vkGetDeviceProcAddr( device, "vkCreateImageView" );
1231 	vkDestroyImageView = cast( typeof( vkDestroyImageView )) vkGetDeviceProcAddr( device, "vkDestroyImageView" );
1232 	vkCreateShaderModule = cast( typeof( vkCreateShaderModule )) vkGetDeviceProcAddr( device, "vkCreateShaderModule" );
1233 	vkDestroyShaderModule = cast( typeof( vkDestroyShaderModule )) vkGetDeviceProcAddr( device, "vkDestroyShaderModule" );
1234 	vkCreatePipelineCache = cast( typeof( vkCreatePipelineCache )) vkGetDeviceProcAddr( device, "vkCreatePipelineCache" );
1235 	vkDestroyPipelineCache = cast( typeof( vkDestroyPipelineCache )) vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" );
1236 	vkGetPipelineCacheData = cast( typeof( vkGetPipelineCacheData )) vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" );
1237 	vkMergePipelineCaches = cast( typeof( vkMergePipelineCaches )) vkGetDeviceProcAddr( device, "vkMergePipelineCaches" );
1238 	vkCreateGraphicsPipelines = cast( typeof( vkCreateGraphicsPipelines )) vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" );
1239 	vkCreateComputePipelines = cast( typeof( vkCreateComputePipelines )) vkGetDeviceProcAddr( device, "vkCreateComputePipelines" );
1240 	vkDestroyPipeline = cast( typeof( vkDestroyPipeline )) vkGetDeviceProcAddr( device, "vkDestroyPipeline" );
1241 	vkCreatePipelineLayout = cast( typeof( vkCreatePipelineLayout )) vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" );
1242 	vkDestroyPipelineLayout = cast( typeof( vkDestroyPipelineLayout )) vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" );
1243 	vkCreateSampler = cast( typeof( vkCreateSampler )) vkGetDeviceProcAddr( device, "vkCreateSampler" );
1244 	vkDestroySampler = cast( typeof( vkDestroySampler )) vkGetDeviceProcAddr( device, "vkDestroySampler" );
1245 	vkCreateDescriptorSetLayout = cast( typeof( vkCreateDescriptorSetLayout )) vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" );
1246 	vkDestroyDescriptorSetLayout = cast( typeof( vkDestroyDescriptorSetLayout )) vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" );
1247 	vkCreateDescriptorPool = cast( typeof( vkCreateDescriptorPool )) vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" );
1248 	vkDestroyDescriptorPool = cast( typeof( vkDestroyDescriptorPool )) vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" );
1249 	vkResetDescriptorPool = cast( typeof( vkResetDescriptorPool )) vkGetDeviceProcAddr( device, "vkResetDescriptorPool" );
1250 	vkAllocateDescriptorSets = cast( typeof( vkAllocateDescriptorSets )) vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" );
1251 	vkFreeDescriptorSets = cast( typeof( vkFreeDescriptorSets )) vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" );
1252 	vkUpdateDescriptorSets = cast( typeof( vkUpdateDescriptorSets )) vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" );
1253 	vkCreateFramebuffer = cast( typeof( vkCreateFramebuffer )) vkGetDeviceProcAddr( device, "vkCreateFramebuffer" );
1254 	vkDestroyFramebuffer = cast( typeof( vkDestroyFramebuffer )) vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" );
1255 	vkCreateRenderPass = cast( typeof( vkCreateRenderPass )) vkGetDeviceProcAddr( device, "vkCreateRenderPass" );
1256 	vkDestroyRenderPass = cast( typeof( vkDestroyRenderPass )) vkGetDeviceProcAddr( device, "vkDestroyRenderPass" );
1257 	vkGetRenderAreaGranularity = cast( typeof( vkGetRenderAreaGranularity )) vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" );
1258 	vkCreateCommandPool = cast( typeof( vkCreateCommandPool )) vkGetDeviceProcAddr( device, "vkCreateCommandPool" );
1259 	vkDestroyCommandPool = cast( typeof( vkDestroyCommandPool )) vkGetDeviceProcAddr( device, "vkDestroyCommandPool" );
1260 	vkResetCommandPool = cast( typeof( vkResetCommandPool )) vkGetDeviceProcAddr( device, "vkResetCommandPool" );
1261 	vkAllocateCommandBuffers = cast( typeof( vkAllocateCommandBuffers )) vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" );
1262 	vkFreeCommandBuffers = cast( typeof( vkFreeCommandBuffers )) vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" );
1263 	vkBeginCommandBuffer = cast( typeof( vkBeginCommandBuffer )) vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" );
1264 	vkEndCommandBuffer = cast( typeof( vkEndCommandBuffer )) vkGetDeviceProcAddr( device, "vkEndCommandBuffer" );
1265 	vkResetCommandBuffer = cast( typeof( vkResetCommandBuffer )) vkGetDeviceProcAddr( device, "vkResetCommandBuffer" );
1266 	vkCmdBindPipeline = cast( typeof( vkCmdBindPipeline )) vkGetDeviceProcAddr( device, "vkCmdBindPipeline" );
1267 	vkCmdSetViewport = cast( typeof( vkCmdSetViewport )) vkGetDeviceProcAddr( device, "vkCmdSetViewport" );
1268 	vkCmdSetScissor = cast( typeof( vkCmdSetScissor )) vkGetDeviceProcAddr( device, "vkCmdSetScissor" );
1269 	vkCmdSetLineWidth = cast( typeof( vkCmdSetLineWidth )) vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" );
1270 	vkCmdSetDepthBias = cast( typeof( vkCmdSetDepthBias )) vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" );
1271 	vkCmdSetBlendConstants = cast( typeof( vkCmdSetBlendConstants )) vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" );
1272 	vkCmdSetDepthBounds = cast( typeof( vkCmdSetDepthBounds )) vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" );
1273 	vkCmdSetStencilCompareMask = cast( typeof( vkCmdSetStencilCompareMask )) vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" );
1274 	vkCmdSetStencilWriteMask = cast( typeof( vkCmdSetStencilWriteMask )) vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" );
1275 	vkCmdSetStencilReference = cast( typeof( vkCmdSetStencilReference )) vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" );
1276 	vkCmdBindDescriptorSets = cast( typeof( vkCmdBindDescriptorSets )) vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" );
1277 	vkCmdBindIndexBuffer = cast( typeof( vkCmdBindIndexBuffer )) vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" );
1278 	vkCmdBindVertexBuffers = cast( typeof( vkCmdBindVertexBuffers )) vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" );
1279 	vkCmdDraw = cast( typeof( vkCmdDraw )) vkGetDeviceProcAddr( device, "vkCmdDraw" );
1280 	vkCmdDrawIndexed = cast( typeof( vkCmdDrawIndexed )) vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" );
1281 	vkCmdDrawIndirect = cast( typeof( vkCmdDrawIndirect )) vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" );
1282 	vkCmdDrawIndexedIndirect = cast( typeof( vkCmdDrawIndexedIndirect )) vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" );
1283 	vkCmdDispatch = cast( typeof( vkCmdDispatch )) vkGetDeviceProcAddr( device, "vkCmdDispatch" );
1284 	vkCmdDispatchIndirect = cast( typeof( vkCmdDispatchIndirect )) vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" );
1285 	vkCmdCopyBuffer = cast( typeof( vkCmdCopyBuffer )) vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" );
1286 	vkCmdCopyImage = cast( typeof( vkCmdCopyImage )) vkGetDeviceProcAddr( device, "vkCmdCopyImage" );
1287 	vkCmdBlitImage = cast( typeof( vkCmdBlitImage )) vkGetDeviceProcAddr( device, "vkCmdBlitImage" );
1288 	vkCmdCopyBufferToImage = cast( typeof( vkCmdCopyBufferToImage )) vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" );
1289 	vkCmdCopyImageToBuffer = cast( typeof( vkCmdCopyImageToBuffer )) vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" );
1290 	vkCmdUpdateBuffer = cast( typeof( vkCmdUpdateBuffer )) vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" );
1291 	vkCmdFillBuffer = cast( typeof( vkCmdFillBuffer )) vkGetDeviceProcAddr( device, "vkCmdFillBuffer" );
1292 	vkCmdClearColorImage = cast( typeof( vkCmdClearColorImage )) vkGetDeviceProcAddr( device, "vkCmdClearColorImage" );
1293 	vkCmdClearDepthStencilImage = cast( typeof( vkCmdClearDepthStencilImage )) vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" );
1294 	vkCmdClearAttachments = cast( typeof( vkCmdClearAttachments )) vkGetDeviceProcAddr( device, "vkCmdClearAttachments" );
1295 	vkCmdResolveImage = cast( typeof( vkCmdResolveImage )) vkGetDeviceProcAddr( device, "vkCmdResolveImage" );
1296 	vkCmdSetEvent = cast( typeof( vkCmdSetEvent )) vkGetDeviceProcAddr( device, "vkCmdSetEvent" );
1297 	vkCmdResetEvent = cast( typeof( vkCmdResetEvent )) vkGetDeviceProcAddr( device, "vkCmdResetEvent" );
1298 	vkCmdWaitEvents = cast( typeof( vkCmdWaitEvents )) vkGetDeviceProcAddr( device, "vkCmdWaitEvents" );
1299 	vkCmdPipelineBarrier = cast( typeof( vkCmdPipelineBarrier )) vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" );
1300 	vkCmdBeginQuery = cast( typeof( vkCmdBeginQuery )) vkGetDeviceProcAddr( device, "vkCmdBeginQuery" );
1301 	vkCmdEndQuery = cast( typeof( vkCmdEndQuery )) vkGetDeviceProcAddr( device, "vkCmdEndQuery" );
1302 	vkCmdResetQueryPool = cast( typeof( vkCmdResetQueryPool )) vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" );
1303 	vkCmdWriteTimestamp = cast( typeof( vkCmdWriteTimestamp )) vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" );
1304 	vkCmdCopyQueryPoolResults = cast( typeof( vkCmdCopyQueryPoolResults )) vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" );
1305 	vkCmdPushConstants = cast( typeof( vkCmdPushConstants )) vkGetDeviceProcAddr( device, "vkCmdPushConstants" );
1306 	vkCmdBeginRenderPass = cast( typeof( vkCmdBeginRenderPass )) vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" );
1307 	vkCmdNextSubpass = cast( typeof( vkCmdNextSubpass )) vkGetDeviceProcAddr( device, "vkCmdNextSubpass" );
1308 	vkCmdEndRenderPass = cast( typeof( vkCmdEndRenderPass )) vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" );
1309 	vkCmdExecuteCommands = cast( typeof( vkCmdExecuteCommands )) vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" );
1310 
1311 	// VK_KHR_swapchain
1312 	vkCreateSwapchainKHR = cast( typeof( vkCreateSwapchainKHR )) vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" );
1313 	vkDestroySwapchainKHR = cast( typeof( vkDestroySwapchainKHR )) vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" );
1314 	vkGetSwapchainImagesKHR = cast( typeof( vkGetSwapchainImagesKHR )) vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" );
1315 	vkAcquireNextImageKHR = cast( typeof( vkAcquireNextImageKHR )) vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" );
1316 	vkQueuePresentKHR = cast( typeof( vkQueuePresentKHR )) vkGetDeviceProcAddr( device, "vkQueuePresentKHR" );
1317 
1318 	// VK_KHR_display_swapchain
1319 	vkCreateSharedSwapchainsKHR = cast( typeof( vkCreateSharedSwapchainsKHR )) vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" );
1320 
1321 	// VK_KHR_maintenance1
1322 	vkTrimCommandPoolKHR = cast( typeof( vkTrimCommandPoolKHR )) vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" );
1323 
1324 	// VK_KHR_external_memory_win32
1325 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1326 		vkGetMemoryWin32HandleKHR = cast( typeof( vkGetMemoryWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" );
1327 		vkGetMemoryWin32HandlePropertiesKHR = cast( typeof( vkGetMemoryWin32HandlePropertiesKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" );
1328 	}
1329 
1330 	// VK_KHR_external_memory_fd
1331 	vkGetMemoryFdKHR = cast( typeof( vkGetMemoryFdKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" );
1332 	vkGetMemoryFdPropertiesKHR = cast( typeof( vkGetMemoryFdPropertiesKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" );
1333 
1334 	// VK_KHR_external_semaphore_win32
1335 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1336 		vkImportSemaphoreWin32HandleKHR = cast( typeof( vkImportSemaphoreWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" );
1337 		vkGetSemaphoreWin32HandleKHR = cast( typeof( vkGetSemaphoreWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" );
1338 	}
1339 
1340 	// VK_KHR_external_semaphore_fd
1341 	vkImportSemaphoreFdKHR = cast( typeof( vkImportSemaphoreFdKHR )) vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" );
1342 	vkGetSemaphoreFdKHR = cast( typeof( vkGetSemaphoreFdKHR )) vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" );
1343 
1344 	// VK_KHR_push_descriptor
1345 	vkCmdPushDescriptorSetKHR = cast( typeof( vkCmdPushDescriptorSetKHR )) vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" );
1346 
1347 	// VK_KHR_descriptor_update_template
1348 	vkCreateDescriptorUpdateTemplateKHR = cast( typeof( vkCreateDescriptorUpdateTemplateKHR )) vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" );
1349 	vkDestroyDescriptorUpdateTemplateKHR = cast( typeof( vkDestroyDescriptorUpdateTemplateKHR )) vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" );
1350 	vkUpdateDescriptorSetWithTemplateKHR = cast( typeof( vkUpdateDescriptorSetWithTemplateKHR )) vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplateKHR" );
1351 	vkCmdPushDescriptorSetWithTemplateKHR = cast( typeof( vkCmdPushDescriptorSetWithTemplateKHR )) vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" );
1352 
1353 	// VK_KHR_shared_presentable_image
1354 	vkGetSwapchainStatusKHR = cast( typeof( vkGetSwapchainStatusKHR )) vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" );
1355 
1356 	// VK_KHR_external_fence_win32
1357 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1358 		vkImportFenceWin32HandleKHR = cast( typeof( vkImportFenceWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" );
1359 		vkGetFenceWin32HandleKHR = cast( typeof( vkGetFenceWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" );
1360 	}
1361 
1362 	// VK_KHR_external_fence_fd
1363 	vkImportFenceFdKHR = cast( typeof( vkImportFenceFdKHR )) vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" );
1364 	vkGetFenceFdKHR = cast( typeof( vkGetFenceFdKHR )) vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" );
1365 
1366 	// VK_KHR_get_memory_requirements2
1367 	vkGetImageMemoryRequirements2KHR = cast( typeof( vkGetImageMemoryRequirements2KHR )) vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" );
1368 	vkGetBufferMemoryRequirements2KHR = cast( typeof( vkGetBufferMemoryRequirements2KHR )) vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" );
1369 	vkGetImageSparseMemoryRequirements2KHR = cast( typeof( vkGetImageSparseMemoryRequirements2KHR )) vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" );
1370 
1371 	// VK_KHR_sampler_ycbcr_conversion
1372 	vkCreateSamplerYcbcrConversionKHR = cast( typeof( vkCreateSamplerYcbcrConversionKHR )) vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" );
1373 	vkDestroySamplerYcbcrConversionKHR = cast( typeof( vkDestroySamplerYcbcrConversionKHR )) vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" );
1374 
1375 	// VK_KHR_bind_memory2
1376 	vkBindBufferMemory2KHR = cast( typeof( vkBindBufferMemory2KHR )) vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" );
1377 	vkBindImageMemory2KHR = cast( typeof( vkBindImageMemory2KHR )) vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" );
1378 
1379 	// VK_ANDROID_native_buffer
1380 	vkGetSwapchainGrallocUsageANDROID = cast( typeof( vkGetSwapchainGrallocUsageANDROID )) vkGetDeviceProcAddr( device, "vkGetSwapchainGrallocUsageANDROID" );
1381 	vkAcquireImageANDROID = cast( typeof( vkAcquireImageANDROID )) vkGetDeviceProcAddr( device, "vkAcquireImageANDROID" );
1382 	vkQueueSignalReleaseImageANDROID = cast( typeof( vkQueueSignalReleaseImageANDROID )) vkGetDeviceProcAddr( device, "vkQueueSignalReleaseImageANDROID" );
1383 
1384 	// VK_EXT_debug_marker
1385 	vkDebugMarkerSetObjectTagEXT = cast( typeof( vkDebugMarkerSetObjectTagEXT )) vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" );
1386 	vkDebugMarkerSetObjectNameEXT = cast( typeof( vkDebugMarkerSetObjectNameEXT )) vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" );
1387 	vkCmdDebugMarkerBeginEXT = cast( typeof( vkCmdDebugMarkerBeginEXT )) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" );
1388 	vkCmdDebugMarkerEndEXT = cast( typeof( vkCmdDebugMarkerEndEXT )) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" );
1389 	vkCmdDebugMarkerInsertEXT = cast( typeof( vkCmdDebugMarkerInsertEXT )) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" );
1390 
1391 	// VK_AMD_draw_indirect_count
1392 	vkCmdDrawIndirectCountAMD = cast( typeof( vkCmdDrawIndirectCountAMD )) vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" );
1393 	vkCmdDrawIndexedIndirectCountAMD = cast( typeof( vkCmdDrawIndexedIndirectCountAMD )) vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" );
1394 
1395 	// VK_NV_external_memory_win32
1396 	version( VK_USE_PLATFORM_WIN32_KHR ) {
1397 		vkGetMemoryWin32HandleNV = cast( typeof( vkGetMemoryWin32HandleNV )) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" );
1398 	}
1399 
1400 	// VK_KHX_device_group
1401 	vkGetDeviceGroupPeerMemoryFeaturesKHX = cast( typeof( vkGetDeviceGroupPeerMemoryFeaturesKHX )) vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHX" );
1402 	vkCmdSetDeviceMaskKHX = cast( typeof( vkCmdSetDeviceMaskKHX )) vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHX" );
1403 	vkCmdDispatchBaseKHX = cast( typeof( vkCmdDispatchBaseKHX )) vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHX" );
1404 	vkGetDeviceGroupPresentCapabilitiesKHX = cast( typeof( vkGetDeviceGroupPresentCapabilitiesKHX )) vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHX" );
1405 	vkGetDeviceGroupSurfacePresentModesKHX = cast( typeof( vkGetDeviceGroupSurfacePresentModesKHX )) vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHX" );
1406 	vkAcquireNextImage2KHX = cast( typeof( vkAcquireNextImage2KHX )) vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHX" );
1407 
1408 	// VK_NVX_device_generated_commands
1409 	vkCmdProcessCommandsNVX = cast( typeof( vkCmdProcessCommandsNVX )) vkGetDeviceProcAddr( device, "vkCmdProcessCommandsNVX" );
1410 	vkCmdReserveSpaceForCommandsNVX = cast( typeof( vkCmdReserveSpaceForCommandsNVX )) vkGetDeviceProcAddr( device, "vkCmdReserveSpaceForCommandsNVX" );
1411 	vkCreateIndirectCommandsLayoutNVX = cast( typeof( vkCreateIndirectCommandsLayoutNVX )) vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNVX" );
1412 	vkDestroyIndirectCommandsLayoutNVX = cast( typeof( vkDestroyIndirectCommandsLayoutNVX )) vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNVX" );
1413 	vkCreateObjectTableNVX = cast( typeof( vkCreateObjectTableNVX )) vkGetDeviceProcAddr( device, "vkCreateObjectTableNVX" );
1414 	vkDestroyObjectTableNVX = cast( typeof( vkDestroyObjectTableNVX )) vkGetDeviceProcAddr( device, "vkDestroyObjectTableNVX" );
1415 	vkRegisterObjectsNVX = cast( typeof( vkRegisterObjectsNVX )) vkGetDeviceProcAddr( device, "vkRegisterObjectsNVX" );
1416 	vkUnregisterObjectsNVX = cast( typeof( vkUnregisterObjectsNVX )) vkGetDeviceProcAddr( device, "vkUnregisterObjectsNVX" );
1417 
1418 	// VK_NV_clip_space_w_scaling
1419 	vkCmdSetViewportWScalingNV = cast( typeof( vkCmdSetViewportWScalingNV )) vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" );
1420 
1421 	// VK_EXT_display_control
1422 	vkDisplayPowerControlEXT = cast( typeof( vkDisplayPowerControlEXT )) vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" );
1423 	vkRegisterDeviceEventEXT = cast( typeof( vkRegisterDeviceEventEXT )) vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" );
1424 	vkRegisterDisplayEventEXT = cast( typeof( vkRegisterDisplayEventEXT )) vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" );
1425 	vkGetSwapchainCounterEXT = cast( typeof( vkGetSwapchainCounterEXT )) vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" );
1426 
1427 	// VK_GOOGLE_display_timing
1428 	vkGetRefreshCycleDurationGOOGLE = cast( typeof( vkGetRefreshCycleDurationGOOGLE )) vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" );
1429 	vkGetPastPresentationTimingGOOGLE = cast( typeof( vkGetPastPresentationTimingGOOGLE )) vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" );
1430 
1431 	// VK_EXT_discard_rectangles
1432 	vkCmdSetDiscardRectangleEXT = cast( typeof( vkCmdSetDiscardRectangleEXT )) vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" );
1433 
1434 	// VK_EXT_hdr_metadata
1435 	vkSetHdrMetadataEXT = cast( typeof( vkSetHdrMetadataEXT )) vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" );
1436 
1437 	// VK_EXT_sample_locations
1438 	vkCmdSetSampleLocationsEXT = cast( typeof( vkCmdSetSampleLocationsEXT )) vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" );
1439 
1440 	// VK_EXT_validation_cache
1441 	vkCreateValidationCacheEXT = cast( typeof( vkCreateValidationCacheEXT )) vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" );
1442 	vkDestroyValidationCacheEXT = cast( typeof( vkDestroyValidationCacheEXT )) vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" );
1443 	vkMergeValidationCachesEXT = cast( typeof( vkMergeValidationCachesEXT )) vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" );
1444 	vkGetValidationCacheDataEXT = cast( typeof( vkGetValidationCacheDataEXT )) vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" );
1445 }
1446 
1447 /// with a valid VkDevice call this function to retrieve VkDevice, VkQueue and VkCommandBuffer related functions grouped in a DispatchDevice struct
1448 /// the functions call directly VkDevice and related resources and can be retrieved for any VkDevice
1449 deprecated( "Use DispatchDevice( VkDevice ) or DispatchDevice.loadDeviceLevelFunctions( VkDevice ) instead" )
1450 DispatchDevice createDispatchDeviceLevelFunctions( VkDevice device ) {
1451 	return DispatchDevice( device );
1452 }
1453 
1454 
1455 // struct to group per device deviceLevelFunctions into a custom namespace
1456 // keeps track of the device to which the functions are bound
1457 struct DispatchDevice {
1458 	private VkDevice device = VK_NULL_HANDLE;
1459 	VkCommandBuffer commandBuffer;
1460 
1461 	// return copy of the internal VkDevice
1462 	VkDevice vkDevice() {
1463 		return device;
1464 	}
1465 
1466 	// Constructor forwards parameter 'device' to 'this.loadDeviceLevelFunctions'
1467 	this( VkDevice device ) {
1468 		this.loadDeviceLevelFunctions( device );
1469 	}
1470 
1471 	// load the device level member functions
1472 	// this also sets the private member 'device' to the passed in VkDevice
1473 	// now the DispatchDevice can be used e.g.:
1474 	//		auto dd = DispatchDevice( device );
1475 	//		dd.vkDestroyDevice( dd.vkDevice, pAllocator );
1476 	// convenience functions to omit the first arg do exist, see bellow
1477 	void loadDeviceLevelFunctions( VkDevice device ) {
1478 		assert( vkGetDeviceProcAddr !is null, "Must call loadInstanceLevelFunctions before loadDeviceLevelFunctions" );
1479 		this.device = device;
1480 
1481 		// VK_VERSION_1_0
1482 		vkDestroyDevice = cast( typeof( vkDestroyDevice )) vkGetDeviceProcAddr( device, "vkDestroyDevice" );
1483 		vkGetDeviceQueue = cast( typeof( vkGetDeviceQueue )) vkGetDeviceProcAddr( device, "vkGetDeviceQueue" );
1484 		vkQueueSubmit = cast( typeof( vkQueueSubmit )) vkGetDeviceProcAddr( device, "vkQueueSubmit" );
1485 		vkQueueWaitIdle = cast( typeof( vkQueueWaitIdle )) vkGetDeviceProcAddr( device, "vkQueueWaitIdle" );
1486 		vkDeviceWaitIdle = cast( typeof( vkDeviceWaitIdle )) vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" );
1487 		vkAllocateMemory = cast( typeof( vkAllocateMemory )) vkGetDeviceProcAddr( device, "vkAllocateMemory" );
1488 		vkFreeMemory = cast( typeof( vkFreeMemory )) vkGetDeviceProcAddr( device, "vkFreeMemory" );
1489 		vkMapMemory = cast( typeof( vkMapMemory )) vkGetDeviceProcAddr( device, "vkMapMemory" );
1490 		vkUnmapMemory = cast( typeof( vkUnmapMemory )) vkGetDeviceProcAddr( device, "vkUnmapMemory" );
1491 		vkFlushMappedMemoryRanges = cast( typeof( vkFlushMappedMemoryRanges )) vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" );
1492 		vkInvalidateMappedMemoryRanges = cast( typeof( vkInvalidateMappedMemoryRanges )) vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" );
1493 		vkGetDeviceMemoryCommitment = cast( typeof( vkGetDeviceMemoryCommitment )) vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" );
1494 		vkBindBufferMemory = cast( typeof( vkBindBufferMemory )) vkGetDeviceProcAddr( device, "vkBindBufferMemory" );
1495 		vkBindImageMemory = cast( typeof( vkBindImageMemory )) vkGetDeviceProcAddr( device, "vkBindImageMemory" );
1496 		vkGetBufferMemoryRequirements = cast( typeof( vkGetBufferMemoryRequirements )) vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" );
1497 		vkGetImageMemoryRequirements = cast( typeof( vkGetImageMemoryRequirements )) vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" );
1498 		vkGetImageSparseMemoryRequirements = cast( typeof( vkGetImageSparseMemoryRequirements )) vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" );
1499 		vkQueueBindSparse = cast( typeof( vkQueueBindSparse )) vkGetDeviceProcAddr( device, "vkQueueBindSparse" );
1500 		vkCreateFence = cast( typeof( vkCreateFence )) vkGetDeviceProcAddr( device, "vkCreateFence" );
1501 		vkDestroyFence = cast( typeof( vkDestroyFence )) vkGetDeviceProcAddr( device, "vkDestroyFence" );
1502 		vkResetFences = cast( typeof( vkResetFences )) vkGetDeviceProcAddr( device, "vkResetFences" );
1503 		vkGetFenceStatus = cast( typeof( vkGetFenceStatus )) vkGetDeviceProcAddr( device, "vkGetFenceStatus" );
1504 		vkWaitForFences = cast( typeof( vkWaitForFences )) vkGetDeviceProcAddr( device, "vkWaitForFences" );
1505 		vkCreateSemaphore = cast( typeof( vkCreateSemaphore )) vkGetDeviceProcAddr( device, "vkCreateSemaphore" );
1506 		vkDestroySemaphore = cast( typeof( vkDestroySemaphore )) vkGetDeviceProcAddr( device, "vkDestroySemaphore" );
1507 		vkCreateEvent = cast( typeof( vkCreateEvent )) vkGetDeviceProcAddr( device, "vkCreateEvent" );
1508 		vkDestroyEvent = cast( typeof( vkDestroyEvent )) vkGetDeviceProcAddr( device, "vkDestroyEvent" );
1509 		vkGetEventStatus = cast( typeof( vkGetEventStatus )) vkGetDeviceProcAddr( device, "vkGetEventStatus" );
1510 		vkSetEvent = cast( typeof( vkSetEvent )) vkGetDeviceProcAddr( device, "vkSetEvent" );
1511 		vkResetEvent = cast( typeof( vkResetEvent )) vkGetDeviceProcAddr( device, "vkResetEvent" );
1512 		vkCreateQueryPool = cast( typeof( vkCreateQueryPool )) vkGetDeviceProcAddr( device, "vkCreateQueryPool" );
1513 		vkDestroyQueryPool = cast( typeof( vkDestroyQueryPool )) vkGetDeviceProcAddr( device, "vkDestroyQueryPool" );
1514 		vkGetQueryPoolResults = cast( typeof( vkGetQueryPoolResults )) vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" );
1515 		vkCreateBuffer = cast( typeof( vkCreateBuffer )) vkGetDeviceProcAddr( device, "vkCreateBuffer" );
1516 		vkDestroyBuffer = cast( typeof( vkDestroyBuffer )) vkGetDeviceProcAddr( device, "vkDestroyBuffer" );
1517 		vkCreateBufferView = cast( typeof( vkCreateBufferView )) vkGetDeviceProcAddr( device, "vkCreateBufferView" );
1518 		vkDestroyBufferView = cast( typeof( vkDestroyBufferView )) vkGetDeviceProcAddr( device, "vkDestroyBufferView" );
1519 		vkCreateImage = cast( typeof( vkCreateImage )) vkGetDeviceProcAddr( device, "vkCreateImage" );
1520 		vkDestroyImage = cast( typeof( vkDestroyImage )) vkGetDeviceProcAddr( device, "vkDestroyImage" );
1521 		vkGetImageSubresourceLayout = cast( typeof( vkGetImageSubresourceLayout )) vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" );
1522 		vkCreateImageView = cast( typeof( vkCreateImageView )) vkGetDeviceProcAddr( device, "vkCreateImageView" );
1523 		vkDestroyImageView = cast( typeof( vkDestroyImageView )) vkGetDeviceProcAddr( device, "vkDestroyImageView" );
1524 		vkCreateShaderModule = cast( typeof( vkCreateShaderModule )) vkGetDeviceProcAddr( device, "vkCreateShaderModule" );
1525 		vkDestroyShaderModule = cast( typeof( vkDestroyShaderModule )) vkGetDeviceProcAddr( device, "vkDestroyShaderModule" );
1526 		vkCreatePipelineCache = cast( typeof( vkCreatePipelineCache )) vkGetDeviceProcAddr( device, "vkCreatePipelineCache" );
1527 		vkDestroyPipelineCache = cast( typeof( vkDestroyPipelineCache )) vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" );
1528 		vkGetPipelineCacheData = cast( typeof( vkGetPipelineCacheData )) vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" );
1529 		vkMergePipelineCaches = cast( typeof( vkMergePipelineCaches )) vkGetDeviceProcAddr( device, "vkMergePipelineCaches" );
1530 		vkCreateGraphicsPipelines = cast( typeof( vkCreateGraphicsPipelines )) vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" );
1531 		vkCreateComputePipelines = cast( typeof( vkCreateComputePipelines )) vkGetDeviceProcAddr( device, "vkCreateComputePipelines" );
1532 		vkDestroyPipeline = cast( typeof( vkDestroyPipeline )) vkGetDeviceProcAddr( device, "vkDestroyPipeline" );
1533 		vkCreatePipelineLayout = cast( typeof( vkCreatePipelineLayout )) vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" );
1534 		vkDestroyPipelineLayout = cast( typeof( vkDestroyPipelineLayout )) vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" );
1535 		vkCreateSampler = cast( typeof( vkCreateSampler )) vkGetDeviceProcAddr( device, "vkCreateSampler" );
1536 		vkDestroySampler = cast( typeof( vkDestroySampler )) vkGetDeviceProcAddr( device, "vkDestroySampler" );
1537 		vkCreateDescriptorSetLayout = cast( typeof( vkCreateDescriptorSetLayout )) vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" );
1538 		vkDestroyDescriptorSetLayout = cast( typeof( vkDestroyDescriptorSetLayout )) vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" );
1539 		vkCreateDescriptorPool = cast( typeof( vkCreateDescriptorPool )) vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" );
1540 		vkDestroyDescriptorPool = cast( typeof( vkDestroyDescriptorPool )) vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" );
1541 		vkResetDescriptorPool = cast( typeof( vkResetDescriptorPool )) vkGetDeviceProcAddr( device, "vkResetDescriptorPool" );
1542 		vkAllocateDescriptorSets = cast( typeof( vkAllocateDescriptorSets )) vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" );
1543 		vkFreeDescriptorSets = cast( typeof( vkFreeDescriptorSets )) vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" );
1544 		vkUpdateDescriptorSets = cast( typeof( vkUpdateDescriptorSets )) vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" );
1545 		vkCreateFramebuffer = cast( typeof( vkCreateFramebuffer )) vkGetDeviceProcAddr( device, "vkCreateFramebuffer" );
1546 		vkDestroyFramebuffer = cast( typeof( vkDestroyFramebuffer )) vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" );
1547 		vkCreateRenderPass = cast( typeof( vkCreateRenderPass )) vkGetDeviceProcAddr( device, "vkCreateRenderPass" );
1548 		vkDestroyRenderPass = cast( typeof( vkDestroyRenderPass )) vkGetDeviceProcAddr( device, "vkDestroyRenderPass" );
1549 		vkGetRenderAreaGranularity = cast( typeof( vkGetRenderAreaGranularity )) vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" );
1550 		vkCreateCommandPool = cast( typeof( vkCreateCommandPool )) vkGetDeviceProcAddr( device, "vkCreateCommandPool" );
1551 		vkDestroyCommandPool = cast( typeof( vkDestroyCommandPool )) vkGetDeviceProcAddr( device, "vkDestroyCommandPool" );
1552 		vkResetCommandPool = cast( typeof( vkResetCommandPool )) vkGetDeviceProcAddr( device, "vkResetCommandPool" );
1553 		vkAllocateCommandBuffers = cast( typeof( vkAllocateCommandBuffers )) vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" );
1554 		vkFreeCommandBuffers = cast( typeof( vkFreeCommandBuffers )) vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" );
1555 		vkBeginCommandBuffer = cast( typeof( vkBeginCommandBuffer )) vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" );
1556 		vkEndCommandBuffer = cast( typeof( vkEndCommandBuffer )) vkGetDeviceProcAddr( device, "vkEndCommandBuffer" );
1557 		vkResetCommandBuffer = cast( typeof( vkResetCommandBuffer )) vkGetDeviceProcAddr( device, "vkResetCommandBuffer" );
1558 		vkCmdBindPipeline = cast( typeof( vkCmdBindPipeline )) vkGetDeviceProcAddr( device, "vkCmdBindPipeline" );
1559 		vkCmdSetViewport = cast( typeof( vkCmdSetViewport )) vkGetDeviceProcAddr( device, "vkCmdSetViewport" );
1560 		vkCmdSetScissor = cast( typeof( vkCmdSetScissor )) vkGetDeviceProcAddr( device, "vkCmdSetScissor" );
1561 		vkCmdSetLineWidth = cast( typeof( vkCmdSetLineWidth )) vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" );
1562 		vkCmdSetDepthBias = cast( typeof( vkCmdSetDepthBias )) vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" );
1563 		vkCmdSetBlendConstants = cast( typeof( vkCmdSetBlendConstants )) vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" );
1564 		vkCmdSetDepthBounds = cast( typeof( vkCmdSetDepthBounds )) vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" );
1565 		vkCmdSetStencilCompareMask = cast( typeof( vkCmdSetStencilCompareMask )) vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" );
1566 		vkCmdSetStencilWriteMask = cast( typeof( vkCmdSetStencilWriteMask )) vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" );
1567 		vkCmdSetStencilReference = cast( typeof( vkCmdSetStencilReference )) vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" );
1568 		vkCmdBindDescriptorSets = cast( typeof( vkCmdBindDescriptorSets )) vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" );
1569 		vkCmdBindIndexBuffer = cast( typeof( vkCmdBindIndexBuffer )) vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" );
1570 		vkCmdBindVertexBuffers = cast( typeof( vkCmdBindVertexBuffers )) vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" );
1571 		vkCmdDraw = cast( typeof( vkCmdDraw )) vkGetDeviceProcAddr( device, "vkCmdDraw" );
1572 		vkCmdDrawIndexed = cast( typeof( vkCmdDrawIndexed )) vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" );
1573 		vkCmdDrawIndirect = cast( typeof( vkCmdDrawIndirect )) vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" );
1574 		vkCmdDrawIndexedIndirect = cast( typeof( vkCmdDrawIndexedIndirect )) vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" );
1575 		vkCmdDispatch = cast( typeof( vkCmdDispatch )) vkGetDeviceProcAddr( device, "vkCmdDispatch" );
1576 		vkCmdDispatchIndirect = cast( typeof( vkCmdDispatchIndirect )) vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" );
1577 		vkCmdCopyBuffer = cast( typeof( vkCmdCopyBuffer )) vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" );
1578 		vkCmdCopyImage = cast( typeof( vkCmdCopyImage )) vkGetDeviceProcAddr( device, "vkCmdCopyImage" );
1579 		vkCmdBlitImage = cast( typeof( vkCmdBlitImage )) vkGetDeviceProcAddr( device, "vkCmdBlitImage" );
1580 		vkCmdCopyBufferToImage = cast( typeof( vkCmdCopyBufferToImage )) vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" );
1581 		vkCmdCopyImageToBuffer = cast( typeof( vkCmdCopyImageToBuffer )) vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" );
1582 		vkCmdUpdateBuffer = cast( typeof( vkCmdUpdateBuffer )) vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" );
1583 		vkCmdFillBuffer = cast( typeof( vkCmdFillBuffer )) vkGetDeviceProcAddr( device, "vkCmdFillBuffer" );
1584 		vkCmdClearColorImage = cast( typeof( vkCmdClearColorImage )) vkGetDeviceProcAddr( device, "vkCmdClearColorImage" );
1585 		vkCmdClearDepthStencilImage = cast( typeof( vkCmdClearDepthStencilImage )) vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" );
1586 		vkCmdClearAttachments = cast( typeof( vkCmdClearAttachments )) vkGetDeviceProcAddr( device, "vkCmdClearAttachments" );
1587 		vkCmdResolveImage = cast( typeof( vkCmdResolveImage )) vkGetDeviceProcAddr( device, "vkCmdResolveImage" );
1588 		vkCmdSetEvent = cast( typeof( vkCmdSetEvent )) vkGetDeviceProcAddr( device, "vkCmdSetEvent" );
1589 		vkCmdResetEvent = cast( typeof( vkCmdResetEvent )) vkGetDeviceProcAddr( device, "vkCmdResetEvent" );
1590 		vkCmdWaitEvents = cast( typeof( vkCmdWaitEvents )) vkGetDeviceProcAddr( device, "vkCmdWaitEvents" );
1591 		vkCmdPipelineBarrier = cast( typeof( vkCmdPipelineBarrier )) vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" );
1592 		vkCmdBeginQuery = cast( typeof( vkCmdBeginQuery )) vkGetDeviceProcAddr( device, "vkCmdBeginQuery" );
1593 		vkCmdEndQuery = cast( typeof( vkCmdEndQuery )) vkGetDeviceProcAddr( device, "vkCmdEndQuery" );
1594 		vkCmdResetQueryPool = cast( typeof( vkCmdResetQueryPool )) vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" );
1595 		vkCmdWriteTimestamp = cast( typeof( vkCmdWriteTimestamp )) vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" );
1596 		vkCmdCopyQueryPoolResults = cast( typeof( vkCmdCopyQueryPoolResults )) vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" );
1597 		vkCmdPushConstants = cast( typeof( vkCmdPushConstants )) vkGetDeviceProcAddr( device, "vkCmdPushConstants" );
1598 		vkCmdBeginRenderPass = cast( typeof( vkCmdBeginRenderPass )) vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" );
1599 		vkCmdNextSubpass = cast( typeof( vkCmdNextSubpass )) vkGetDeviceProcAddr( device, "vkCmdNextSubpass" );
1600 		vkCmdEndRenderPass = cast( typeof( vkCmdEndRenderPass )) vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" );
1601 		vkCmdExecuteCommands = cast( typeof( vkCmdExecuteCommands )) vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" );
1602 
1603 		// VK_KHR_swapchain
1604 		vkCreateSwapchainKHR = cast( typeof( vkCreateSwapchainKHR )) vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" );
1605 		vkDestroySwapchainKHR = cast( typeof( vkDestroySwapchainKHR )) vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" );
1606 		vkGetSwapchainImagesKHR = cast( typeof( vkGetSwapchainImagesKHR )) vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" );
1607 		vkAcquireNextImageKHR = cast( typeof( vkAcquireNextImageKHR )) vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" );
1608 		vkQueuePresentKHR = cast( typeof( vkQueuePresentKHR )) vkGetDeviceProcAddr( device, "vkQueuePresentKHR" );
1609 
1610 		// VK_KHR_display_swapchain
1611 		vkCreateSharedSwapchainsKHR = cast( typeof( vkCreateSharedSwapchainsKHR )) vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" );
1612 
1613 		// VK_KHR_maintenance1
1614 		vkTrimCommandPoolKHR = cast( typeof( vkTrimCommandPoolKHR )) vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" );
1615 
1616 		// VK_KHR_external_memory_win32
1617 		version( VK_USE_PLATFORM_WIN32_KHR ) {
1618 			vkGetMemoryWin32HandleKHR = cast( typeof( vkGetMemoryWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" );
1619 			vkGetMemoryWin32HandlePropertiesKHR = cast( typeof( vkGetMemoryWin32HandlePropertiesKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" );
1620 		}
1621 
1622 		// VK_KHR_external_memory_fd
1623 		vkGetMemoryFdKHR = cast( typeof( vkGetMemoryFdKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" );
1624 		vkGetMemoryFdPropertiesKHR = cast( typeof( vkGetMemoryFdPropertiesKHR )) vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" );
1625 
1626 		// VK_KHR_external_semaphore_win32
1627 		version( VK_USE_PLATFORM_WIN32_KHR ) {
1628 			vkImportSemaphoreWin32HandleKHR = cast( typeof( vkImportSemaphoreWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" );
1629 			vkGetSemaphoreWin32HandleKHR = cast( typeof( vkGetSemaphoreWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" );
1630 		}
1631 
1632 		// VK_KHR_external_semaphore_fd
1633 		vkImportSemaphoreFdKHR = cast( typeof( vkImportSemaphoreFdKHR )) vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" );
1634 		vkGetSemaphoreFdKHR = cast( typeof( vkGetSemaphoreFdKHR )) vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" );
1635 
1636 		// VK_KHR_push_descriptor
1637 		vkCmdPushDescriptorSetKHR = cast( typeof( vkCmdPushDescriptorSetKHR )) vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" );
1638 
1639 		// VK_KHR_descriptor_update_template
1640 		vkCreateDescriptorUpdateTemplateKHR = cast( typeof( vkCreateDescriptorUpdateTemplateKHR )) vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" );
1641 		vkDestroyDescriptorUpdateTemplateKHR = cast( typeof( vkDestroyDescriptorUpdateTemplateKHR )) vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" );
1642 		vkUpdateDescriptorSetWithTemplateKHR = cast( typeof( vkUpdateDescriptorSetWithTemplateKHR )) vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplateKHR" );
1643 		vkCmdPushDescriptorSetWithTemplateKHR = cast( typeof( vkCmdPushDescriptorSetWithTemplateKHR )) vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" );
1644 
1645 		// VK_KHR_shared_presentable_image
1646 		vkGetSwapchainStatusKHR = cast( typeof( vkGetSwapchainStatusKHR )) vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" );
1647 
1648 		// VK_KHR_external_fence_win32
1649 		version( VK_USE_PLATFORM_WIN32_KHR ) {
1650 			vkImportFenceWin32HandleKHR = cast( typeof( vkImportFenceWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" );
1651 			vkGetFenceWin32HandleKHR = cast( typeof( vkGetFenceWin32HandleKHR )) vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" );
1652 		}
1653 
1654 		// VK_KHR_external_fence_fd
1655 		vkImportFenceFdKHR = cast( typeof( vkImportFenceFdKHR )) vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" );
1656 		vkGetFenceFdKHR = cast( typeof( vkGetFenceFdKHR )) vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" );
1657 
1658 		// VK_KHR_get_memory_requirements2
1659 		vkGetImageMemoryRequirements2KHR = cast( typeof( vkGetImageMemoryRequirements2KHR )) vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" );
1660 		vkGetBufferMemoryRequirements2KHR = cast( typeof( vkGetBufferMemoryRequirements2KHR )) vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" );
1661 		vkGetImageSparseMemoryRequirements2KHR = cast( typeof( vkGetImageSparseMemoryRequirements2KHR )) vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" );
1662 
1663 		// VK_KHR_sampler_ycbcr_conversion
1664 		vkCreateSamplerYcbcrConversionKHR = cast( typeof( vkCreateSamplerYcbcrConversionKHR )) vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" );
1665 		vkDestroySamplerYcbcrConversionKHR = cast( typeof( vkDestroySamplerYcbcrConversionKHR )) vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" );
1666 
1667 		// VK_KHR_bind_memory2
1668 		vkBindBufferMemory2KHR = cast( typeof( vkBindBufferMemory2KHR )) vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" );
1669 		vkBindImageMemory2KHR = cast( typeof( vkBindImageMemory2KHR )) vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" );
1670 
1671 		// VK_ANDROID_native_buffer
1672 		vkGetSwapchainGrallocUsageANDROID = cast( typeof( vkGetSwapchainGrallocUsageANDROID )) vkGetDeviceProcAddr( device, "vkGetSwapchainGrallocUsageANDROID" );
1673 		vkAcquireImageANDROID = cast( typeof( vkAcquireImageANDROID )) vkGetDeviceProcAddr( device, "vkAcquireImageANDROID" );
1674 		vkQueueSignalReleaseImageANDROID = cast( typeof( vkQueueSignalReleaseImageANDROID )) vkGetDeviceProcAddr( device, "vkQueueSignalReleaseImageANDROID" );
1675 
1676 		// VK_EXT_debug_marker
1677 		vkDebugMarkerSetObjectTagEXT = cast( typeof( vkDebugMarkerSetObjectTagEXT )) vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" );
1678 		vkDebugMarkerSetObjectNameEXT = cast( typeof( vkDebugMarkerSetObjectNameEXT )) vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" );
1679 		vkCmdDebugMarkerBeginEXT = cast( typeof( vkCmdDebugMarkerBeginEXT )) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" );
1680 		vkCmdDebugMarkerEndEXT = cast( typeof( vkCmdDebugMarkerEndEXT )) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" );
1681 		vkCmdDebugMarkerInsertEXT = cast( typeof( vkCmdDebugMarkerInsertEXT )) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" );
1682 
1683 		// VK_AMD_draw_indirect_count
1684 		vkCmdDrawIndirectCountAMD = cast( typeof( vkCmdDrawIndirectCountAMD )) vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" );
1685 		vkCmdDrawIndexedIndirectCountAMD = cast( typeof( vkCmdDrawIndexedIndirectCountAMD )) vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" );
1686 
1687 		// VK_NV_external_memory_win32
1688 		version( VK_USE_PLATFORM_WIN32_KHR ) {
1689 			vkGetMemoryWin32HandleNV = cast( typeof( vkGetMemoryWin32HandleNV )) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" );
1690 		}
1691 
1692 		// VK_KHX_device_group
1693 		vkGetDeviceGroupPeerMemoryFeaturesKHX = cast( typeof( vkGetDeviceGroupPeerMemoryFeaturesKHX )) vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHX" );
1694 		vkCmdSetDeviceMaskKHX = cast( typeof( vkCmdSetDeviceMaskKHX )) vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHX" );
1695 		vkCmdDispatchBaseKHX = cast( typeof( vkCmdDispatchBaseKHX )) vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHX" );
1696 		vkGetDeviceGroupPresentCapabilitiesKHX = cast( typeof( vkGetDeviceGroupPresentCapabilitiesKHX )) vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHX" );
1697 		vkGetDeviceGroupSurfacePresentModesKHX = cast( typeof( vkGetDeviceGroupSurfacePresentModesKHX )) vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHX" );
1698 		vkAcquireNextImage2KHX = cast( typeof( vkAcquireNextImage2KHX )) vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHX" );
1699 
1700 		// VK_NVX_device_generated_commands
1701 		vkCmdProcessCommandsNVX = cast( typeof( vkCmdProcessCommandsNVX )) vkGetDeviceProcAddr( device, "vkCmdProcessCommandsNVX" );
1702 		vkCmdReserveSpaceForCommandsNVX = cast( typeof( vkCmdReserveSpaceForCommandsNVX )) vkGetDeviceProcAddr( device, "vkCmdReserveSpaceForCommandsNVX" );
1703 		vkCreateIndirectCommandsLayoutNVX = cast( typeof( vkCreateIndirectCommandsLayoutNVX )) vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNVX" );
1704 		vkDestroyIndirectCommandsLayoutNVX = cast( typeof( vkDestroyIndirectCommandsLayoutNVX )) vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNVX" );
1705 		vkCreateObjectTableNVX = cast( typeof( vkCreateObjectTableNVX )) vkGetDeviceProcAddr( device, "vkCreateObjectTableNVX" );
1706 		vkDestroyObjectTableNVX = cast( typeof( vkDestroyObjectTableNVX )) vkGetDeviceProcAddr( device, "vkDestroyObjectTableNVX" );
1707 		vkRegisterObjectsNVX = cast( typeof( vkRegisterObjectsNVX )) vkGetDeviceProcAddr( device, "vkRegisterObjectsNVX" );
1708 		vkUnregisterObjectsNVX = cast( typeof( vkUnregisterObjectsNVX )) vkGetDeviceProcAddr( device, "vkUnregisterObjectsNVX" );
1709 
1710 		// VK_NV_clip_space_w_scaling
1711 		vkCmdSetViewportWScalingNV = cast( typeof( vkCmdSetViewportWScalingNV )) vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" );
1712 
1713 		// VK_EXT_display_control
1714 		vkDisplayPowerControlEXT = cast( typeof( vkDisplayPowerControlEXT )) vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" );
1715 		vkRegisterDeviceEventEXT = cast( typeof( vkRegisterDeviceEventEXT )) vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" );
1716 		vkRegisterDisplayEventEXT = cast( typeof( vkRegisterDisplayEventEXT )) vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" );
1717 		vkGetSwapchainCounterEXT = cast( typeof( vkGetSwapchainCounterEXT )) vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" );
1718 
1719 		// VK_GOOGLE_display_timing
1720 		vkGetRefreshCycleDurationGOOGLE = cast( typeof( vkGetRefreshCycleDurationGOOGLE )) vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" );
1721 		vkGetPastPresentationTimingGOOGLE = cast( typeof( vkGetPastPresentationTimingGOOGLE )) vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" );
1722 
1723 		// VK_EXT_discard_rectangles
1724 		vkCmdSetDiscardRectangleEXT = cast( typeof( vkCmdSetDiscardRectangleEXT )) vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" );
1725 
1726 		// VK_EXT_hdr_metadata
1727 		vkSetHdrMetadataEXT = cast( typeof( vkSetHdrMetadataEXT )) vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" );
1728 
1729 		// VK_EXT_sample_locations
1730 		vkCmdSetSampleLocationsEXT = cast( typeof( vkCmdSetSampleLocationsEXT )) vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" );
1731 
1732 		// VK_EXT_validation_cache
1733 		vkCreateValidationCacheEXT = cast( typeof( vkCreateValidationCacheEXT )) vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" );
1734 		vkDestroyValidationCacheEXT = cast( typeof( vkDestroyValidationCacheEXT )) vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" );
1735 		vkMergeValidationCachesEXT = cast( typeof( vkMergeValidationCachesEXT )) vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" );
1736 		vkGetValidationCacheDataEXT = cast( typeof( vkGetValidationCacheDataEXT )) vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" );
1737 	}
1738 
1739 	// Convenience member functions, forwarded to corresponding vulkan functions
1740 	// If the first arg of the vulkan function is VkDevice it can be omitted
1741 	// private 'DipatchDevice' member 'device' will be passed to the forwarded vulkan functions
1742 	// the crux is that function pointers can't be overloaded with regular functions
1743 	// hence the vk prefix is ditched for the convenience variants
1744 	// e.g.:
1745 	//		auto dd = DispatchDevice( device );
1746 	//		dd.DestroyDevice( pAllocator );		// instead of: dd.vkDestroyDevice( dd.vkDevice, pAllocator );
1747 	//
1748 	// Same mechanism works with functions which require a VkCommandBuffer as first arg
1749 	// In this case the public member 'commandBuffer' must be set beforehand
1750 	// e.g.:
1751 	//		dd.commandBuffer = some_command_buffer;
1752 	//		dd.BeginCommandBuffer( &beginInfo );
1753 	//		dd.CmdBindPipeline( VK_PIPELINE_BIND_POINT_GRAPHICS, some_pipeline );
1754 	//
1755 	// Does not work with queues, there are just too few queue related functions
1756 
1757 	// VK_VERSION_1_0
1758 	void DestroyDevice( const( VkAllocationCallbacks )* pAllocator ) {
1759 		vkDestroyDevice( this.device, pAllocator );
1760 	}
1761 	void GetDeviceQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue ) {
1762 		vkGetDeviceQueue( this.device, queueFamilyIndex, queueIndex, pQueue );
1763 	}
1764 	VkResult DeviceWaitIdle() {
1765 		return vkDeviceWaitIdle( this.device );
1766 	}
1767 	VkResult AllocateMemory( const( VkMemoryAllocateInfo )* pAllocateInfo, const( VkAllocationCallbacks )* pAllocator, VkDeviceMemory* pMemory ) {
1768 		return vkAllocateMemory( this.device, pAllocateInfo, pAllocator, pMemory );
1769 	}
1770 	void FreeMemory( VkDeviceMemory memory, const( VkAllocationCallbacks )* pAllocator ) {
1771 		vkFreeMemory( this.device, memory, pAllocator );
1772 	}
1773 	VkResult MapMemory( VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData ) {
1774 		return vkMapMemory( this.device, memory, offset, size, flags, ppData );
1775 	}
1776 	void UnmapMemory( VkDeviceMemory memory ) {
1777 		vkUnmapMemory( this.device, memory );
1778 	}
1779 	VkResult FlushMappedMemoryRanges( uint32_t memoryRangeCount, const( VkMappedMemoryRange )* pMemoryRanges ) {
1780 		return vkFlushMappedMemoryRanges( this.device, memoryRangeCount, pMemoryRanges );
1781 	}
1782 	VkResult InvalidateMappedMemoryRanges( uint32_t memoryRangeCount, const( VkMappedMemoryRange )* pMemoryRanges ) {
1783 		return vkInvalidateMappedMemoryRanges( this.device, memoryRangeCount, pMemoryRanges );
1784 	}
1785 	void GetDeviceMemoryCommitment( VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes ) {
1786 		vkGetDeviceMemoryCommitment( this.device, memory, pCommittedMemoryInBytes );
1787 	}
1788 	VkResult BindBufferMemory( VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset ) {
1789 		return vkBindBufferMemory( this.device, buffer, memory, memoryOffset );
1790 	}
1791 	VkResult BindImageMemory( VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset ) {
1792 		return vkBindImageMemory( this.device, image, memory, memoryOffset );
1793 	}
1794 	void GetBufferMemoryRequirements( VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements ) {
1795 		vkGetBufferMemoryRequirements( this.device, buffer, pMemoryRequirements );
1796 	}
1797 	void GetImageMemoryRequirements( VkImage image, VkMemoryRequirements* pMemoryRequirements ) {
1798 		vkGetImageMemoryRequirements( this.device, image, pMemoryRequirements );
1799 	}
1800 	void GetImageSparseMemoryRequirements( VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements ) {
1801 		vkGetImageSparseMemoryRequirements( this.device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements );
1802 	}
1803 	VkResult CreateFence( const( VkFenceCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkFence* pFence ) {
1804 		return vkCreateFence( this.device, pCreateInfo, pAllocator, pFence );
1805 	}
1806 	void DestroyFence( VkFence fence, const( VkAllocationCallbacks )* pAllocator ) {
1807 		vkDestroyFence( this.device, fence, pAllocator );
1808 	}
1809 	VkResult ResetFences( uint32_t fenceCount, const( VkFence )* pFences ) {
1810 		return vkResetFences( this.device, fenceCount, pFences );
1811 	}
1812 	VkResult GetFenceStatus( VkFence fence ) {
1813 		return vkGetFenceStatus( this.device, fence );
1814 	}
1815 	VkResult WaitForFences( uint32_t fenceCount, const( VkFence )* pFences, VkBool32 waitAll, uint64_t timeout ) {
1816 		return vkWaitForFences( this.device, fenceCount, pFences, waitAll, timeout );
1817 	}
1818 	VkResult CreateSemaphore( const( VkSemaphoreCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSemaphore* pSemaphore ) {
1819 		return vkCreateSemaphore( this.device, pCreateInfo, pAllocator, pSemaphore );
1820 	}
1821 	void DestroySemaphore( VkSemaphore semaphore, const( VkAllocationCallbacks )* pAllocator ) {
1822 		vkDestroySemaphore( this.device, semaphore, pAllocator );
1823 	}
1824 	VkResult CreateEvent( const( VkEventCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkEvent* pEvent ) {
1825 		return vkCreateEvent( this.device, pCreateInfo, pAllocator, pEvent );
1826 	}
1827 	void DestroyEvent( VkEvent event, const( VkAllocationCallbacks )* pAllocator ) {
1828 		vkDestroyEvent( this.device, event, pAllocator );
1829 	}
1830 	VkResult GetEventStatus( VkEvent event ) {
1831 		return vkGetEventStatus( this.device, event );
1832 	}
1833 	VkResult SetEvent( VkEvent event ) {
1834 		return vkSetEvent( this.device, event );
1835 	}
1836 	VkResult ResetEvent( VkEvent event ) {
1837 		return vkResetEvent( this.device, event );
1838 	}
1839 	VkResult CreateQueryPool( const( VkQueryPoolCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkQueryPool* pQueryPool ) {
1840 		return vkCreateQueryPool( this.device, pCreateInfo, pAllocator, pQueryPool );
1841 	}
1842 	void DestroyQueryPool( VkQueryPool queryPool, const( VkAllocationCallbacks )* pAllocator ) {
1843 		vkDestroyQueryPool( this.device, queryPool, pAllocator );
1844 	}
1845 	VkResult GetQueryPoolResults( VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags ) {
1846 		return vkGetQueryPoolResults( this.device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags );
1847 	}
1848 	VkResult CreateBuffer( const( VkBufferCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkBuffer* pBuffer ) {
1849 		return vkCreateBuffer( this.device, pCreateInfo, pAllocator, pBuffer );
1850 	}
1851 	void DestroyBuffer( VkBuffer buffer, const( VkAllocationCallbacks )* pAllocator ) {
1852 		vkDestroyBuffer( this.device, buffer, pAllocator );
1853 	}
1854 	VkResult CreateBufferView( const( VkBufferViewCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkBufferView* pView ) {
1855 		return vkCreateBufferView( this.device, pCreateInfo, pAllocator, pView );
1856 	}
1857 	void DestroyBufferView( VkBufferView bufferView, const( VkAllocationCallbacks )* pAllocator ) {
1858 		vkDestroyBufferView( this.device, bufferView, pAllocator );
1859 	}
1860 	VkResult CreateImage( const( VkImageCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkImage* pImage ) {
1861 		return vkCreateImage( this.device, pCreateInfo, pAllocator, pImage );
1862 	}
1863 	void DestroyImage( VkImage image, const( VkAllocationCallbacks )* pAllocator ) {
1864 		vkDestroyImage( this.device, image, pAllocator );
1865 	}
1866 	void GetImageSubresourceLayout( VkImage image, const( VkImageSubresource )* pSubresource, VkSubresourceLayout* pLayout ) {
1867 		vkGetImageSubresourceLayout( this.device, image, pSubresource, pLayout );
1868 	}
1869 	VkResult CreateImageView( const( VkImageViewCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkImageView* pView ) {
1870 		return vkCreateImageView( this.device, pCreateInfo, pAllocator, pView );
1871 	}
1872 	void DestroyImageView( VkImageView imageView, const( VkAllocationCallbacks )* pAllocator ) {
1873 		vkDestroyImageView( this.device, imageView, pAllocator );
1874 	}
1875 	VkResult CreateShaderModule( const( VkShaderModuleCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkShaderModule* pShaderModule ) {
1876 		return vkCreateShaderModule( this.device, pCreateInfo, pAllocator, pShaderModule );
1877 	}
1878 	void DestroyShaderModule( VkShaderModule shaderModule, const( VkAllocationCallbacks )* pAllocator ) {
1879 		vkDestroyShaderModule( this.device, shaderModule, pAllocator );
1880 	}
1881 	VkResult CreatePipelineCache( const( VkPipelineCacheCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkPipelineCache* pPipelineCache ) {
1882 		return vkCreatePipelineCache( this.device, pCreateInfo, pAllocator, pPipelineCache );
1883 	}
1884 	void DestroyPipelineCache( VkPipelineCache pipelineCache, const( VkAllocationCallbacks )* pAllocator ) {
1885 		vkDestroyPipelineCache( this.device, pipelineCache, pAllocator );
1886 	}
1887 	VkResult GetPipelineCacheData( VkPipelineCache pipelineCache, size_t* pDataSize, void* pData ) {
1888 		return vkGetPipelineCacheData( this.device, pipelineCache, pDataSize, pData );
1889 	}
1890 	VkResult MergePipelineCaches( VkPipelineCache dstCache, uint32_t srcCacheCount, const( VkPipelineCache )* pSrcCaches ) {
1891 		return vkMergePipelineCaches( this.device, dstCache, srcCacheCount, pSrcCaches );
1892 	}
1893 	VkResult CreateGraphicsPipelines( VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkGraphicsPipelineCreateInfo )* pCreateInfos, const( VkAllocationCallbacks )* pAllocator, VkPipeline* pPipelines ) {
1894 		return vkCreateGraphicsPipelines( this.device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines );
1895 	}
1896 	VkResult CreateComputePipelines( VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkComputePipelineCreateInfo )* pCreateInfos, const( VkAllocationCallbacks )* pAllocator, VkPipeline* pPipelines ) {
1897 		return vkCreateComputePipelines( this.device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines );
1898 	}
1899 	void DestroyPipeline( VkPipeline pipeline, const( VkAllocationCallbacks )* pAllocator ) {
1900 		vkDestroyPipeline( this.device, pipeline, pAllocator );
1901 	}
1902 	VkResult CreatePipelineLayout( const( VkPipelineLayoutCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkPipelineLayout* pPipelineLayout ) {
1903 		return vkCreatePipelineLayout( this.device, pCreateInfo, pAllocator, pPipelineLayout );
1904 	}
1905 	void DestroyPipelineLayout( VkPipelineLayout pipelineLayout, const( VkAllocationCallbacks )* pAllocator ) {
1906 		vkDestroyPipelineLayout( this.device, pipelineLayout, pAllocator );
1907 	}
1908 	VkResult CreateSampler( const( VkSamplerCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSampler* pSampler ) {
1909 		return vkCreateSampler( this.device, pCreateInfo, pAllocator, pSampler );
1910 	}
1911 	void DestroySampler( VkSampler sampler, const( VkAllocationCallbacks )* pAllocator ) {
1912 		vkDestroySampler( this.device, sampler, pAllocator );
1913 	}
1914 	VkResult CreateDescriptorSetLayout( const( VkDescriptorSetLayoutCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDescriptorSetLayout* pSetLayout ) {
1915 		return vkCreateDescriptorSetLayout( this.device, pCreateInfo, pAllocator, pSetLayout );
1916 	}
1917 	void DestroyDescriptorSetLayout( VkDescriptorSetLayout descriptorSetLayout, const( VkAllocationCallbacks )* pAllocator ) {
1918 		vkDestroyDescriptorSetLayout( this.device, descriptorSetLayout, pAllocator );
1919 	}
1920 	VkResult CreateDescriptorPool( const( VkDescriptorPoolCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDescriptorPool* pDescriptorPool ) {
1921 		return vkCreateDescriptorPool( this.device, pCreateInfo, pAllocator, pDescriptorPool );
1922 	}
1923 	void DestroyDescriptorPool( VkDescriptorPool descriptorPool, const( VkAllocationCallbacks )* pAllocator ) {
1924 		vkDestroyDescriptorPool( this.device, descriptorPool, pAllocator );
1925 	}
1926 	VkResult ResetDescriptorPool( VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags ) {
1927 		return vkResetDescriptorPool( this.device, descriptorPool, flags );
1928 	}
1929 	VkResult AllocateDescriptorSets( const( VkDescriptorSetAllocateInfo )* pAllocateInfo, VkDescriptorSet* pDescriptorSets ) {
1930 		return vkAllocateDescriptorSets( this.device, pAllocateInfo, pDescriptorSets );
1931 	}
1932 	VkResult FreeDescriptorSets( VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const( VkDescriptorSet )* pDescriptorSets ) {
1933 		return vkFreeDescriptorSets( this.device, descriptorPool, descriptorSetCount, pDescriptorSets );
1934 	}
1935 	void UpdateDescriptorSets( uint32_t descriptorWriteCount, const( VkWriteDescriptorSet )* pDescriptorWrites, uint32_t descriptorCopyCount, const( VkCopyDescriptorSet )* pDescriptorCopies ) {
1936 		vkUpdateDescriptorSets( this.device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies );
1937 	}
1938 	VkResult CreateFramebuffer( const( VkFramebufferCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkFramebuffer* pFramebuffer ) {
1939 		return vkCreateFramebuffer( this.device, pCreateInfo, pAllocator, pFramebuffer );
1940 	}
1941 	void DestroyFramebuffer( VkFramebuffer framebuffer, const( VkAllocationCallbacks )* pAllocator ) {
1942 		vkDestroyFramebuffer( this.device, framebuffer, pAllocator );
1943 	}
1944 	VkResult CreateRenderPass( const( VkRenderPassCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkRenderPass* pRenderPass ) {
1945 		return vkCreateRenderPass( this.device, pCreateInfo, pAllocator, pRenderPass );
1946 	}
1947 	void DestroyRenderPass( VkRenderPass renderPass, const( VkAllocationCallbacks )* pAllocator ) {
1948 		vkDestroyRenderPass( this.device, renderPass, pAllocator );
1949 	}
1950 	void GetRenderAreaGranularity( VkRenderPass renderPass, VkExtent2D* pGranularity ) {
1951 		vkGetRenderAreaGranularity( this.device, renderPass, pGranularity );
1952 	}
1953 	VkResult CreateCommandPool( const( VkCommandPoolCreateInfo )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkCommandPool* pCommandPool ) {
1954 		return vkCreateCommandPool( this.device, pCreateInfo, pAllocator, pCommandPool );
1955 	}
1956 	void DestroyCommandPool( VkCommandPool commandPool, const( VkAllocationCallbacks )* pAllocator ) {
1957 		vkDestroyCommandPool( this.device, commandPool, pAllocator );
1958 	}
1959 	VkResult ResetCommandPool( VkCommandPool commandPool, VkCommandPoolResetFlags flags ) {
1960 		return vkResetCommandPool( this.device, commandPool, flags );
1961 	}
1962 	VkResult AllocateCommandBuffers( const( VkCommandBufferAllocateInfo )* pAllocateInfo, VkCommandBuffer* pCommandBuffers ) {
1963 		return vkAllocateCommandBuffers( this.device, pAllocateInfo, pCommandBuffers );
1964 	}
1965 	void FreeCommandBuffers( VkCommandPool commandPool, uint32_t commandBufferCount, const( VkCommandBuffer )* pCommandBuffers ) {
1966 		vkFreeCommandBuffers( this.device, commandPool, commandBufferCount, pCommandBuffers );
1967 	}
1968 	VkResult BeginCommandBuffer( const( VkCommandBufferBeginInfo )* pBeginInfo ) {
1969 		return vkBeginCommandBuffer( this.commandBuffer, pBeginInfo );
1970 	}
1971 	VkResult EndCommandBuffer() {
1972 		return vkEndCommandBuffer( this.commandBuffer );
1973 	}
1974 	VkResult ResetCommandBuffer( VkCommandBufferResetFlags flags ) {
1975 		return vkResetCommandBuffer( this.commandBuffer, flags );
1976 	}
1977 	void CmdBindPipeline( VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline ) {
1978 		vkCmdBindPipeline( this.commandBuffer, pipelineBindPoint, pipeline );
1979 	}
1980 	void CmdSetViewport( uint32_t firstViewport, uint32_t viewportCount, const( VkViewport )* pViewports ) {
1981 		vkCmdSetViewport( this.commandBuffer, firstViewport, viewportCount, pViewports );
1982 	}
1983 	void CmdSetScissor( uint32_t firstScissor, uint32_t scissorCount, const( VkRect2D )* pScissors ) {
1984 		vkCmdSetScissor( this.commandBuffer, firstScissor, scissorCount, pScissors );
1985 	}
1986 	void CmdSetLineWidth( float lineWidth ) {
1987 		vkCmdSetLineWidth( this.commandBuffer, lineWidth );
1988 	}
1989 	void CmdSetDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) {
1990 		vkCmdSetDepthBias( this.commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor );
1991 	}
1992 	void CmdSetBlendConstants( const float[4] blendConstants ) {
1993 		vkCmdSetBlendConstants( this.commandBuffer, blendConstants );
1994 	}
1995 	void CmdSetDepthBounds( float minDepthBounds, float maxDepthBounds ) {
1996 		vkCmdSetDepthBounds( this.commandBuffer, minDepthBounds, maxDepthBounds );
1997 	}
1998 	void CmdSetStencilCompareMask( VkStencilFaceFlags faceMask, uint32_t compareMask ) {
1999 		vkCmdSetStencilCompareMask( this.commandBuffer, faceMask, compareMask );
2000 	}
2001 	void CmdSetStencilWriteMask( VkStencilFaceFlags faceMask, uint32_t writeMask ) {
2002 		vkCmdSetStencilWriteMask( this.commandBuffer, faceMask, writeMask );
2003 	}
2004 	void CmdSetStencilReference( VkStencilFaceFlags faceMask, uint32_t reference ) {
2005 		vkCmdSetStencilReference( this.commandBuffer, faceMask, reference );
2006 	}
2007 	void CmdBindDescriptorSets( VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const( VkDescriptorSet )* pDescriptorSets, uint32_t dynamicOffsetCount, const( uint32_t )* pDynamicOffsets ) {
2008 		vkCmdBindDescriptorSets( this.commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets );
2009 	}
2010 	void CmdBindIndexBuffer( VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType ) {
2011 		vkCmdBindIndexBuffer( this.commandBuffer, buffer, offset, indexType );
2012 	}
2013 	void CmdBindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const( VkBuffer )* pBuffers, const( VkDeviceSize )* pOffsets ) {
2014 		vkCmdBindVertexBuffers( this.commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets );
2015 	}
2016 	void CmdDraw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) {
2017 		vkCmdDraw( this.commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance );
2018 	}
2019 	void CmdDrawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) {
2020 		vkCmdDrawIndexed( this.commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
2021 	}
2022 	void CmdDrawIndirect( VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) {
2023 		vkCmdDrawIndirect( this.commandBuffer, buffer, offset, drawCount, stride );
2024 	}
2025 	void CmdDrawIndexedIndirect( VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) {
2026 		vkCmdDrawIndexedIndirect( this.commandBuffer, buffer, offset, drawCount, stride );
2027 	}
2028 	void CmdDispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) {
2029 		vkCmdDispatch( this.commandBuffer, groupCountX, groupCountY, groupCountZ );
2030 	}
2031 	void CmdDispatchIndirect( VkBuffer buffer, VkDeviceSize offset ) {
2032 		vkCmdDispatchIndirect( this.commandBuffer, buffer, offset );
2033 	}
2034 	void CmdCopyBuffer( VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const( VkBufferCopy )* pRegions ) {
2035 		vkCmdCopyBuffer( this.commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions );
2036 	}
2037 	void CmdCopyImage( VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageCopy )* pRegions ) {
2038 		vkCmdCopyImage( this.commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions );
2039 	}
2040 	void CmdBlitImage( VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageBlit )* pRegions, VkFilter filter ) {
2041 		vkCmdBlitImage( this.commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter );
2042 	}
2043 	void CmdCopyBufferToImage( VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkBufferImageCopy )* pRegions ) {
2044 		vkCmdCopyBufferToImage( this.commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions );
2045 	}
2046 	void CmdCopyImageToBuffer( VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const( VkBufferImageCopy )* pRegions ) {
2047 		vkCmdCopyImageToBuffer( this.commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions );
2048 	}
2049 	void CmdUpdateBuffer( VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const( void )* pData ) {
2050 		vkCmdUpdateBuffer( this.commandBuffer, dstBuffer, dstOffset, dataSize, pData );
2051 	}
2052 	void CmdFillBuffer( VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data ) {
2053 		vkCmdFillBuffer( this.commandBuffer, dstBuffer, dstOffset, size, data );
2054 	}
2055 	void CmdClearColorImage( VkImage image, VkImageLayout imageLayout, const( VkClearColorValue )* pColor, uint32_t rangeCount, const( VkImageSubresourceRange )* pRanges ) {
2056 		vkCmdClearColorImage( this.commandBuffer, image, imageLayout, pColor, rangeCount, pRanges );
2057 	}
2058 	void CmdClearDepthStencilImage( VkImage image, VkImageLayout imageLayout, const( VkClearDepthStencilValue )* pDepthStencil, uint32_t rangeCount, const( VkImageSubresourceRange )* pRanges ) {
2059 		vkCmdClearDepthStencilImage( this.commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges );
2060 	}
2061 	void CmdClearAttachments( uint32_t attachmentCount, const( VkClearAttachment )* pAttachments, uint32_t rectCount, const( VkClearRect )* pRects ) {
2062 		vkCmdClearAttachments( this.commandBuffer, attachmentCount, pAttachments, rectCount, pRects );
2063 	}
2064 	void CmdResolveImage( VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageResolve )* pRegions ) {
2065 		vkCmdResolveImage( this.commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions );
2066 	}
2067 	void CmdSetEvent( VkEvent event, VkPipelineStageFlags stageMask ) {
2068 		vkCmdSetEvent( this.commandBuffer, event, stageMask );
2069 	}
2070 	void CmdResetEvent( VkEvent event, VkPipelineStageFlags stageMask ) {
2071 		vkCmdResetEvent( this.commandBuffer, event, stageMask );
2072 	}
2073 	void CmdWaitEvents( uint32_t eventCount, const( VkEvent )* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const( VkMemoryBarrier )* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const( VkBufferMemoryBarrier )* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const( VkImageMemoryBarrier )* pImageMemoryBarriers ) {
2074 		vkCmdWaitEvents( this.commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers );
2075 	}
2076 	void CmdPipelineBarrier( VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const( VkMemoryBarrier )* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const( VkBufferMemoryBarrier )* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const( VkImageMemoryBarrier )* pImageMemoryBarriers ) {
2077 		vkCmdPipelineBarrier( this.commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers );
2078 	}
2079 	void CmdBeginQuery( VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags ) {
2080 		vkCmdBeginQuery( this.commandBuffer, queryPool, query, flags );
2081 	}
2082 	void CmdEndQuery( VkQueryPool queryPool, uint32_t query ) {
2083 		vkCmdEndQuery( this.commandBuffer, queryPool, query );
2084 	}
2085 	void CmdResetQueryPool( VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) {
2086 		vkCmdResetQueryPool( this.commandBuffer, queryPool, firstQuery, queryCount );
2087 	}
2088 	void CmdWriteTimestamp( VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query ) {
2089 		vkCmdWriteTimestamp( this.commandBuffer, pipelineStage, queryPool, query );
2090 	}
2091 	void CmdCopyQueryPoolResults( VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags ) {
2092 		vkCmdCopyQueryPoolResults( this.commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags );
2093 	}
2094 	void CmdPushConstants( VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const( void )* pValues ) {
2095 		vkCmdPushConstants( this.commandBuffer, layout, stageFlags, offset, size, pValues );
2096 	}
2097 	void CmdBeginRenderPass( const( VkRenderPassBeginInfo )* pRenderPassBegin, VkSubpassContents contents ) {
2098 		vkCmdBeginRenderPass( this.commandBuffer, pRenderPassBegin, contents );
2099 	}
2100 	void CmdNextSubpass( VkSubpassContents contents ) {
2101 		vkCmdNextSubpass( this.commandBuffer, contents );
2102 	}
2103 	void CmdEndRenderPass() {
2104 		vkCmdEndRenderPass( this.commandBuffer );
2105 	}
2106 	void CmdExecuteCommands( uint32_t commandBufferCount, const( VkCommandBuffer )* pCommandBuffers ) {
2107 		vkCmdExecuteCommands( this.commandBuffer, commandBufferCount, pCommandBuffers );
2108 	}
2109 
2110 	// VK_KHR_display_swapchain
2111 	VkResult CreateSharedSwapchainsKHR( uint32_t swapchainCount, const( VkSwapchainCreateInfoKHR )* pCreateInfos, const( VkAllocationCallbacks )* pAllocator, VkSwapchainKHR* pSwapchains ) {
2112 		return vkCreateSharedSwapchainsKHR( this.device, swapchainCount, pCreateInfos, pAllocator, pSwapchains );
2113 	}
2114 
2115 	// VK_KHR_maintenance1
2116 	void TrimCommandPoolKHR( VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags ) {
2117 		vkTrimCommandPoolKHR( this.device, commandPool, flags );
2118 	}
2119 
2120 	// VK_KHR_external_memory_win32
2121 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2122 		VkResult GetMemoryWin32HandleKHR( const( VkMemoryGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle ) {
2123 			return vkGetMemoryWin32HandleKHR( this.device, pGetWin32HandleInfo, pHandle );
2124 		}
2125 		VkResult GetMemoryWin32HandlePropertiesKHR( VkExternalMemoryHandleTypeFlagBitsKHR handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties ) {
2126 			return vkGetMemoryWin32HandlePropertiesKHR( this.device, handleType, handle, pMemoryWin32HandleProperties );
2127 		}
2128 	}
2129 
2130 	// VK_KHR_external_memory_fd
2131 	VkResult GetMemoryFdKHR( const( VkMemoryGetFdInfoKHR )* pGetFdInfo, int* pFd ) {
2132 		return vkGetMemoryFdKHR( this.device, pGetFdInfo, pFd );
2133 	}
2134 	VkResult GetMemoryFdPropertiesKHR( VkExternalMemoryHandleTypeFlagBitsKHR handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties ) {
2135 		return vkGetMemoryFdPropertiesKHR( this.device, handleType, fd, pMemoryFdProperties );
2136 	}
2137 
2138 	// VK_KHR_external_semaphore_win32
2139 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2140 		VkResult ImportSemaphoreWin32HandleKHR( const( VkImportSemaphoreWin32HandleInfoKHR )* pImportSemaphoreWin32HandleInfo ) {
2141 			return vkImportSemaphoreWin32HandleKHR( this.device, pImportSemaphoreWin32HandleInfo );
2142 		}
2143 		VkResult GetSemaphoreWin32HandleKHR( const( VkSemaphoreGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle ) {
2144 			return vkGetSemaphoreWin32HandleKHR( this.device, pGetWin32HandleInfo, pHandle );
2145 		}
2146 	}
2147 
2148 	// VK_KHR_external_semaphore_fd
2149 	VkResult ImportSemaphoreFdKHR( const( VkImportSemaphoreFdInfoKHR )* pImportSemaphoreFdInfo ) {
2150 		return vkImportSemaphoreFdKHR( this.device, pImportSemaphoreFdInfo );
2151 	}
2152 	VkResult GetSemaphoreFdKHR( const( VkSemaphoreGetFdInfoKHR )* pGetFdInfo, int* pFd ) {
2153 		return vkGetSemaphoreFdKHR( this.device, pGetFdInfo, pFd );
2154 	}
2155 
2156 	// VK_KHR_push_descriptor
2157 	void CmdPushDescriptorSetKHR( VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const( VkWriteDescriptorSet )* pDescriptorWrites ) {
2158 		vkCmdPushDescriptorSetKHR( this.commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites );
2159 	}
2160 
2161 	// VK_KHR_descriptor_update_template
2162 	VkResult CreateDescriptorUpdateTemplateKHR( const( VkDescriptorUpdateTemplateCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate ) {
2163 		return vkCreateDescriptorUpdateTemplateKHR( this.device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate );
2164 	}
2165 	void DestroyDescriptorUpdateTemplateKHR( VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const( VkAllocationCallbacks )* pAllocator ) {
2166 		vkDestroyDescriptorUpdateTemplateKHR( this.device, descriptorUpdateTemplate, pAllocator );
2167 	}
2168 	void UpdateDescriptorSetWithTemplateKHR( VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const( void )* pData ) {
2169 		vkUpdateDescriptorSetWithTemplateKHR( this.device, descriptorSet, descriptorUpdateTemplate, pData );
2170 	}
2171 	void CmdPushDescriptorSetWithTemplateKHR( VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const( void )* pData ) {
2172 		vkCmdPushDescriptorSetWithTemplateKHR( this.commandBuffer, descriptorUpdateTemplate, layout, set, pData );
2173 	}
2174 
2175 	// VK_KHR_shared_presentable_image
2176 	VkResult GetSwapchainStatusKHR( VkSwapchainKHR swapchain ) {
2177 		return vkGetSwapchainStatusKHR( this.device, swapchain );
2178 	}
2179 
2180 	// VK_KHR_external_fence_win32
2181 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2182 		VkResult ImportFenceWin32HandleKHR( const( VkImportFenceWin32HandleInfoKHR )* pImportFenceWin32HandleInfo ) {
2183 			return vkImportFenceWin32HandleKHR( this.device, pImportFenceWin32HandleInfo );
2184 		}
2185 		VkResult GetFenceWin32HandleKHR( const( VkFenceGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle ) {
2186 			return vkGetFenceWin32HandleKHR( this.device, pGetWin32HandleInfo, pHandle );
2187 		}
2188 	}
2189 
2190 	// VK_KHR_external_fence_fd
2191 	VkResult ImportFenceFdKHR( const( VkImportFenceFdInfoKHR )* pImportFenceFdInfo ) {
2192 		return vkImportFenceFdKHR( this.device, pImportFenceFdInfo );
2193 	}
2194 	VkResult GetFenceFdKHR( const( VkFenceGetFdInfoKHR )* pGetFdInfo, int* pFd ) {
2195 		return vkGetFenceFdKHR( this.device, pGetFdInfo, pFd );
2196 	}
2197 
2198 	// VK_KHR_get_memory_requirements2
2199 	void GetImageMemoryRequirements2KHR( const( VkImageMemoryRequirementsInfo2KHR )* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements ) {
2200 		vkGetImageMemoryRequirements2KHR( this.device, pInfo, pMemoryRequirements );
2201 	}
2202 	void GetBufferMemoryRequirements2KHR( const( VkBufferMemoryRequirementsInfo2KHR )* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements ) {
2203 		vkGetBufferMemoryRequirements2KHR( this.device, pInfo, pMemoryRequirements );
2204 	}
2205 	void GetImageSparseMemoryRequirements2KHR( const( VkImageSparseMemoryRequirementsInfo2KHR )* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements ) {
2206 		vkGetImageSparseMemoryRequirements2KHR( this.device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements );
2207 	}
2208 
2209 	// VK_KHR_sampler_ycbcr_conversion
2210 	VkResult CreateSamplerYcbcrConversionKHR( const( VkSamplerYcbcrConversionCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSamplerYcbcrConversionKHR* pYcbcrConversion ) {
2211 		return vkCreateSamplerYcbcrConversionKHR( this.device, pCreateInfo, pAllocator, pYcbcrConversion );
2212 	}
2213 	void DestroySamplerYcbcrConversionKHR( VkSamplerYcbcrConversionKHR ycbcrConversion, const( VkAllocationCallbacks )* pAllocator ) {
2214 		vkDestroySamplerYcbcrConversionKHR( this.device, ycbcrConversion, pAllocator );
2215 	}
2216 
2217 	// VK_KHR_bind_memory2
2218 	VkResult BindBufferMemory2KHR( uint32_t bindInfoCount, const( VkBindBufferMemoryInfoKHR )* pBindInfos ) {
2219 		return vkBindBufferMemory2KHR( this.device, bindInfoCount, pBindInfos );
2220 	}
2221 	VkResult BindImageMemory2KHR( uint32_t bindInfoCount, const( VkBindImageMemoryInfoKHR )* pBindInfos ) {
2222 		return vkBindImageMemory2KHR( this.device, bindInfoCount, pBindInfos );
2223 	}
2224 
2225 	// VK_EXT_debug_marker
2226 	VkResult DebugMarkerSetObjectTagEXT( const( VkDebugMarkerObjectTagInfoEXT )* pTagInfo ) {
2227 		return vkDebugMarkerSetObjectTagEXT( this.device, pTagInfo );
2228 	}
2229 	VkResult DebugMarkerSetObjectNameEXT( const( VkDebugMarkerObjectNameInfoEXT )* pNameInfo ) {
2230 		return vkDebugMarkerSetObjectNameEXT( this.device, pNameInfo );
2231 	}
2232 	void CmdDebugMarkerBeginEXT( const( VkDebugMarkerMarkerInfoEXT )* pMarkerInfo ) {
2233 		vkCmdDebugMarkerBeginEXT( this.commandBuffer, pMarkerInfo );
2234 	}
2235 	void CmdDebugMarkerEndEXT() {
2236 		vkCmdDebugMarkerEndEXT( this.commandBuffer );
2237 	}
2238 	void CmdDebugMarkerInsertEXT( const( VkDebugMarkerMarkerInfoEXT )* pMarkerInfo ) {
2239 		vkCmdDebugMarkerInsertEXT( this.commandBuffer, pMarkerInfo );
2240 	}
2241 
2242 	// VK_AMD_draw_indirect_count
2243 	void CmdDrawIndirectCountAMD( VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) {
2244 		vkCmdDrawIndirectCountAMD( this.commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride );
2245 	}
2246 	void CmdDrawIndexedIndirectCountAMD( VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) {
2247 		vkCmdDrawIndexedIndirectCountAMD( this.commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride );
2248 	}
2249 
2250 	// VK_NV_external_memory_win32
2251 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2252 		VkResult GetMemoryWin32HandleNV( VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) {
2253 			return vkGetMemoryWin32HandleNV( this.device, memory, handleType, pHandle );
2254 		}
2255 	}
2256 
2257 	// VK_KHX_device_group
2258 	void GetDeviceGroupPeerMemoryFeaturesKHX( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures ) {
2259 		vkGetDeviceGroupPeerMemoryFeaturesKHX( this.device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures );
2260 	}
2261 	void CmdSetDeviceMaskKHX( uint32_t deviceMask ) {
2262 		vkCmdSetDeviceMaskKHX( this.commandBuffer, deviceMask );
2263 	}
2264 	void CmdDispatchBaseKHX( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) {
2265 		vkCmdDispatchBaseKHX( this.commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ );
2266 	}
2267 	VkResult GetDeviceGroupPresentCapabilitiesKHX( VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities ) {
2268 		return vkGetDeviceGroupPresentCapabilitiesKHX( this.device, pDeviceGroupPresentCapabilities );
2269 	}
2270 	VkResult GetDeviceGroupSurfacePresentModesKHX( VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes ) {
2271 		return vkGetDeviceGroupSurfacePresentModesKHX( this.device, surface, pModes );
2272 	}
2273 	VkResult AcquireNextImage2KHX( const( VkAcquireNextImageInfoKHX )* pAcquireInfo, uint32_t* pImageIndex ) {
2274 		return vkAcquireNextImage2KHX( this.device, pAcquireInfo, pImageIndex );
2275 	}
2276 
2277 	// VK_NV_clip_space_w_scaling
2278 	void CmdSetViewportWScalingNV( uint32_t firstViewport, uint32_t viewportCount, const( VkViewportWScalingNV )* pViewportWScalings ) {
2279 		vkCmdSetViewportWScalingNV( this.commandBuffer, firstViewport, viewportCount, pViewportWScalings );
2280 	}
2281 
2282 	// VK_EXT_display_control
2283 	VkResult DisplayPowerControlEXT( VkDisplayKHR display, const( VkDisplayPowerInfoEXT )* pDisplayPowerInfo ) {
2284 		return vkDisplayPowerControlEXT( this.device, display, pDisplayPowerInfo );
2285 	}
2286 	VkResult RegisterDeviceEventEXT( const( VkDeviceEventInfoEXT )* pDeviceEventInfo, const( VkAllocationCallbacks )* pAllocator, VkFence* pFence ) {
2287 		return vkRegisterDeviceEventEXT( this.device, pDeviceEventInfo, pAllocator, pFence );
2288 	}
2289 	VkResult RegisterDisplayEventEXT( VkDisplayKHR display, const( VkDisplayEventInfoEXT )* pDisplayEventInfo, const( VkAllocationCallbacks )* pAllocator, VkFence* pFence ) {
2290 		return vkRegisterDisplayEventEXT( this.device, display, pDisplayEventInfo, pAllocator, pFence );
2291 	}
2292 	VkResult GetSwapchainCounterEXT( VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue ) {
2293 		return vkGetSwapchainCounterEXT( this.device, swapchain, counter, pCounterValue );
2294 	}
2295 
2296 	// VK_GOOGLE_display_timing
2297 	VkResult GetRefreshCycleDurationGOOGLE( VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties ) {
2298 		return vkGetRefreshCycleDurationGOOGLE( this.device, swapchain, pDisplayTimingProperties );
2299 	}
2300 	VkResult GetPastPresentationTimingGOOGLE( VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings ) {
2301 		return vkGetPastPresentationTimingGOOGLE( this.device, swapchain, pPresentationTimingCount, pPresentationTimings );
2302 	}
2303 
2304 	// VK_EXT_discard_rectangles
2305 	void CmdSetDiscardRectangleEXT( uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const( VkRect2D )* pDiscardRectangles ) {
2306 		vkCmdSetDiscardRectangleEXT( this.commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles );
2307 	}
2308 
2309 	// VK_EXT_hdr_metadata
2310 	void SetHdrMetadataEXT( uint32_t swapchainCount, const( VkSwapchainKHR )* pSwapchains, const( VkHdrMetadataEXT )* pMetadata ) {
2311 		vkSetHdrMetadataEXT( this.device, swapchainCount, pSwapchains, pMetadata );
2312 	}
2313 
2314 	// VK_EXT_validation_cache
2315 	VkResult CreateValidationCacheEXT( const( VkValidationCacheCreateInfoEXT )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkValidationCacheEXT* pValidationCache ) {
2316 		return vkCreateValidationCacheEXT( this.device, pCreateInfo, pAllocator, pValidationCache );
2317 	}
2318 	void DestroyValidationCacheEXT( VkValidationCacheEXT validationCache, const( VkAllocationCallbacks )* pAllocator ) {
2319 		vkDestroyValidationCacheEXT( this.device, validationCache, pAllocator );
2320 	}
2321 	VkResult MergeValidationCachesEXT( VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const( VkValidationCacheEXT )* pSrcCaches ) {
2322 		return vkMergeValidationCachesEXT( this.device, dstCache, srcCacheCount, pSrcCaches );
2323 	}
2324 	VkResult GetValidationCacheDataEXT( VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData ) {
2325 		return vkGetValidationCacheDataEXT( this.device, validationCache, pDataSize, pData );
2326 	}
2327 
2328 	// Member vulkan function decelerations
2329 	PFN_vkDestroyDevice vkDestroyDevice;
2330 	PFN_vkGetDeviceQueue vkGetDeviceQueue;
2331 	PFN_vkQueueSubmit vkQueueSubmit;
2332 	PFN_vkQueueWaitIdle vkQueueWaitIdle;
2333 	PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
2334 	PFN_vkAllocateMemory vkAllocateMemory;
2335 	PFN_vkFreeMemory vkFreeMemory;
2336 	PFN_vkMapMemory vkMapMemory;
2337 	PFN_vkUnmapMemory vkUnmapMemory;
2338 	PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
2339 	PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
2340 	PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment;
2341 	PFN_vkBindBufferMemory vkBindBufferMemory;
2342 	PFN_vkBindImageMemory vkBindImageMemory;
2343 	PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
2344 	PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
2345 	PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
2346 	PFN_vkQueueBindSparse vkQueueBindSparse;
2347 	PFN_vkCreateFence vkCreateFence;
2348 	PFN_vkDestroyFence vkDestroyFence;
2349 	PFN_vkResetFences vkResetFences;
2350 	PFN_vkGetFenceStatus vkGetFenceStatus;
2351 	PFN_vkWaitForFences vkWaitForFences;
2352 	PFN_vkCreateSemaphore vkCreateSemaphore;
2353 	PFN_vkDestroySemaphore vkDestroySemaphore;
2354 	PFN_vkCreateEvent vkCreateEvent;
2355 	PFN_vkDestroyEvent vkDestroyEvent;
2356 	PFN_vkGetEventStatus vkGetEventStatus;
2357 	PFN_vkSetEvent vkSetEvent;
2358 	PFN_vkResetEvent vkResetEvent;
2359 	PFN_vkCreateQueryPool vkCreateQueryPool;
2360 	PFN_vkDestroyQueryPool vkDestroyQueryPool;
2361 	PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
2362 	PFN_vkCreateBuffer vkCreateBuffer;
2363 	PFN_vkDestroyBuffer vkDestroyBuffer;
2364 	PFN_vkCreateBufferView vkCreateBufferView;
2365 	PFN_vkDestroyBufferView vkDestroyBufferView;
2366 	PFN_vkCreateImage vkCreateImage;
2367 	PFN_vkDestroyImage vkDestroyImage;
2368 	PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
2369 	PFN_vkCreateImageView vkCreateImageView;
2370 	PFN_vkDestroyImageView vkDestroyImageView;
2371 	PFN_vkCreateShaderModule vkCreateShaderModule;
2372 	PFN_vkDestroyShaderModule vkDestroyShaderModule;
2373 	PFN_vkCreatePipelineCache vkCreatePipelineCache;
2374 	PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
2375 	PFN_vkGetPipelineCacheData vkGetPipelineCacheData;
2376 	PFN_vkMergePipelineCaches vkMergePipelineCaches;
2377 	PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
2378 	PFN_vkCreateComputePipelines vkCreateComputePipelines;
2379 	PFN_vkDestroyPipeline vkDestroyPipeline;
2380 	PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
2381 	PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
2382 	PFN_vkCreateSampler vkCreateSampler;
2383 	PFN_vkDestroySampler vkDestroySampler;
2384 	PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
2385 	PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
2386 	PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
2387 	PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
2388 	PFN_vkResetDescriptorPool vkResetDescriptorPool;
2389 	PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
2390 	PFN_vkFreeDescriptorSets vkFreeDescriptorSets;
2391 	PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
2392 	PFN_vkCreateFramebuffer vkCreateFramebuffer;
2393 	PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
2394 	PFN_vkCreateRenderPass vkCreateRenderPass;
2395 	PFN_vkDestroyRenderPass vkDestroyRenderPass;
2396 	PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity;
2397 	PFN_vkCreateCommandPool vkCreateCommandPool;
2398 	PFN_vkDestroyCommandPool vkDestroyCommandPool;
2399 	PFN_vkResetCommandPool vkResetCommandPool;
2400 	PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
2401 	PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
2402 	PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
2403 	PFN_vkEndCommandBuffer vkEndCommandBuffer;
2404 	PFN_vkResetCommandBuffer vkResetCommandBuffer;
2405 	PFN_vkCmdBindPipeline vkCmdBindPipeline;
2406 	PFN_vkCmdSetViewport vkCmdSetViewport;
2407 	PFN_vkCmdSetScissor vkCmdSetScissor;
2408 	PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
2409 	PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
2410 	PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants;
2411 	PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds;
2412 	PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
2413 	PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
2414 	PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
2415 	PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
2416 	PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
2417 	PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
2418 	PFN_vkCmdDraw vkCmdDraw;
2419 	PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
2420 	PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
2421 	PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
2422 	PFN_vkCmdDispatch vkCmdDispatch;
2423 	PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect;
2424 	PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
2425 	PFN_vkCmdCopyImage vkCmdCopyImage;
2426 	PFN_vkCmdBlitImage vkCmdBlitImage;
2427 	PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
2428 	PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer;
2429 	PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer;
2430 	PFN_vkCmdFillBuffer vkCmdFillBuffer;
2431 	PFN_vkCmdClearColorImage vkCmdClearColorImage;
2432 	PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage;
2433 	PFN_vkCmdClearAttachments vkCmdClearAttachments;
2434 	PFN_vkCmdResolveImage vkCmdResolveImage;
2435 	PFN_vkCmdSetEvent vkCmdSetEvent;
2436 	PFN_vkCmdResetEvent vkCmdResetEvent;
2437 	PFN_vkCmdWaitEvents vkCmdWaitEvents;
2438 	PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
2439 	PFN_vkCmdBeginQuery vkCmdBeginQuery;
2440 	PFN_vkCmdEndQuery vkCmdEndQuery;
2441 	PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
2442 	PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp;
2443 	PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
2444 	PFN_vkCmdPushConstants vkCmdPushConstants;
2445 	PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
2446 	PFN_vkCmdNextSubpass vkCmdNextSubpass;
2447 	PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
2448 	PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
2449 	PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;
2450 	PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
2451 	PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
2452 	PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
2453 	PFN_vkQueuePresentKHR vkQueuePresentKHR;
2454 	PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
2455 	PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
2456 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2457 		PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR;
2458 		PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR;
2459 	}
2460 	PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR;
2461 	PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR;
2462 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2463 		PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR;
2464 		PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR;
2465 	}
2466 	PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR;
2467 	PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR;
2468 	PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR;
2469 	PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR;
2470 	PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR;
2471 	PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR;
2472 	PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR;
2473 	PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR;
2474 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2475 		PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR;
2476 		PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR;
2477 	}
2478 	PFN_vkImportFenceFdKHR vkImportFenceFdKHR;
2479 	PFN_vkGetFenceFdKHR vkGetFenceFdKHR;
2480 	PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR;
2481 	PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR;
2482 	PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR;
2483 	PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR;
2484 	PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR;
2485 	PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR;
2486 	PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR;
2487 	PFN_vkGetSwapchainGrallocUsageANDROID vkGetSwapchainGrallocUsageANDROID;
2488 	PFN_vkAcquireImageANDROID vkAcquireImageANDROID;
2489 	PFN_vkQueueSignalReleaseImageANDROID vkQueueSignalReleaseImageANDROID;
2490 	PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT;
2491 	PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT;
2492 	PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT;
2493 	PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT;
2494 	PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT;
2495 	PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD;
2496 	PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD;
2497 	version( VK_USE_PLATFORM_WIN32_KHR ) {
2498 		PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV;
2499 	}
2500 	PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX vkGetDeviceGroupPeerMemoryFeaturesKHX;
2501 	PFN_vkCmdSetDeviceMaskKHX vkCmdSetDeviceMaskKHX;
2502 	PFN_vkCmdDispatchBaseKHX vkCmdDispatchBaseKHX;
2503 	PFN_vkGetDeviceGroupPresentCapabilitiesKHX vkGetDeviceGroupPresentCapabilitiesKHX;
2504 	PFN_vkGetDeviceGroupSurfacePresentModesKHX vkGetDeviceGroupSurfacePresentModesKHX;
2505 	PFN_vkAcquireNextImage2KHX vkAcquireNextImage2KHX;
2506 	PFN_vkCmdProcessCommandsNVX vkCmdProcessCommandsNVX;
2507 	PFN_vkCmdReserveSpaceForCommandsNVX vkCmdReserveSpaceForCommandsNVX;
2508 	PFN_vkCreateIndirectCommandsLayoutNVX vkCreateIndirectCommandsLayoutNVX;
2509 	PFN_vkDestroyIndirectCommandsLayoutNVX vkDestroyIndirectCommandsLayoutNVX;
2510 	PFN_vkCreateObjectTableNVX vkCreateObjectTableNVX;
2511 	PFN_vkDestroyObjectTableNVX vkDestroyObjectTableNVX;
2512 	PFN_vkRegisterObjectsNVX vkRegisterObjectsNVX;
2513 	PFN_vkUnregisterObjectsNVX vkUnregisterObjectsNVX;
2514 	PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV;
2515 	PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT;
2516 	PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT;
2517 	PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT;
2518 	PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT;
2519 	PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE;
2520 	PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE;
2521 	PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT;
2522 	PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT;
2523 	PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT;
2524 	PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT;
2525 	PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT;
2526 	PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
2527 	PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT;
2528 }
2529 
2530 // Derelict loader to acquire entry point vkGetInstanceProcAddr
2531 version( ERUPTED_FROM_DERELICT ) {
2532 	import derelict.util.loader;
2533 	import derelict.util.system;
2534 
2535 	private {
2536 		version( Windows )
2537 			enum libNames = "vulkan-1.dll";
2538 
2539 		else version( Posix )
2540 			enum libNames = "libvulkan.so.1";
2541 
2542 		else
2543 			static assert( 0,"Need to implement Vulkan libNames for this operating system." );
2544 	}
2545 
2546 	class DerelictEruptedLoader : SharedLibLoader {
2547 		this() {
2548 			super( libNames );
2549 		}
2550 
2551 		protected override void loadSymbols() {
2552 			typeof( vkGetInstanceProcAddr ) getProcAddr;
2553 			bindFunc( cast( void** )&getProcAddr, "vkGetInstanceProcAddr" );
2554 			loadGlobalLevelFunctions( getProcAddr );
2555 		}
2556 	}
2557 
2558 	__gshared DerelictEruptedLoader DerelictErupted;
2559 
2560 	shared static this() {
2561 		DerelictErupted = new DerelictEruptedLoader();
2562 	}
2563 }
2564 
2565