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 x, uint32_t y, uint32_t z);
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_EXT_debug_report
208 	alias PFN_vkCreateDebugReportCallbackEXT = VkResult function(VkInstance instance, const(VkDebugReportCallbackCreateInfoEXT)* pCreateInfo, const(VkAllocationCallbacks)* pAllocator, VkDebugReportCallbackEXT* pCallback);
209 	alias PFN_vkDestroyDebugReportCallbackEXT = void function(VkInstance instance, VkDebugReportCallbackEXT callback, const(VkAllocationCallbacks)* pAllocator);
210 	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);
211 
212 	// VK_EXT_debug_marker
213 	alias PFN_vkDebugMarkerSetObjectTagEXT = VkResult function(VkDevice device, VkDebugMarkerObjectTagInfoEXT* pTagInfo);
214 	alias PFN_vkDebugMarkerSetObjectNameEXT = VkResult function(VkDevice device, VkDebugMarkerObjectNameInfoEXT* pNameInfo);
215 	alias PFN_vkCmdDebugMarkerBeginEXT = void function(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
216 	alias PFN_vkCmdDebugMarkerEndEXT = void function(VkCommandBuffer commandBuffer);
217 	alias PFN_vkCmdDebugMarkerInsertEXT = void function(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
218 }
219 
220 __gshared {
221 
222 	// VK_VERSION_1_0
223 	PFN_vkCreateInstance vkCreateInstance;
224 	PFN_vkDestroyInstance vkDestroyInstance;
225 	PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
226 	PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
227 	PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
228 	PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties;
229 	PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
230 	PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
231 	PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
232 	PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
233 	PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
234 	PFN_vkCreateDevice vkCreateDevice;
235 	PFN_vkDestroyDevice vkDestroyDevice;
236 	PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
237 	PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
238 	PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
239 	PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
240 	PFN_vkGetDeviceQueue vkGetDeviceQueue;
241 	PFN_vkQueueSubmit vkQueueSubmit;
242 	PFN_vkQueueWaitIdle vkQueueWaitIdle;
243 	PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
244 	PFN_vkAllocateMemory vkAllocateMemory;
245 	PFN_vkFreeMemory vkFreeMemory;
246 	PFN_vkMapMemory vkMapMemory;
247 	PFN_vkUnmapMemory vkUnmapMemory;
248 	PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
249 	PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
250 	PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment;
251 	PFN_vkBindBufferMemory vkBindBufferMemory;
252 	PFN_vkBindImageMemory vkBindImageMemory;
253 	PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
254 	PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
255 	PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
256 	PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties;
257 	PFN_vkQueueBindSparse vkQueueBindSparse;
258 	PFN_vkCreateFence vkCreateFence;
259 	PFN_vkDestroyFence vkDestroyFence;
260 	PFN_vkResetFences vkResetFences;
261 	PFN_vkGetFenceStatus vkGetFenceStatus;
262 	PFN_vkWaitForFences vkWaitForFences;
263 	PFN_vkCreateSemaphore vkCreateSemaphore;
264 	PFN_vkDestroySemaphore vkDestroySemaphore;
265 	PFN_vkCreateEvent vkCreateEvent;
266 	PFN_vkDestroyEvent vkDestroyEvent;
267 	PFN_vkGetEventStatus vkGetEventStatus;
268 	PFN_vkSetEvent vkSetEvent;
269 	PFN_vkResetEvent vkResetEvent;
270 	PFN_vkCreateQueryPool vkCreateQueryPool;
271 	PFN_vkDestroyQueryPool vkDestroyQueryPool;
272 	PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
273 	PFN_vkCreateBuffer vkCreateBuffer;
274 	PFN_vkDestroyBuffer vkDestroyBuffer;
275 	PFN_vkCreateBufferView vkCreateBufferView;
276 	PFN_vkDestroyBufferView vkDestroyBufferView;
277 	PFN_vkCreateImage vkCreateImage;
278 	PFN_vkDestroyImage vkDestroyImage;
279 	PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
280 	PFN_vkCreateImageView vkCreateImageView;
281 	PFN_vkDestroyImageView vkDestroyImageView;
282 	PFN_vkCreateShaderModule vkCreateShaderModule;
283 	PFN_vkDestroyShaderModule vkDestroyShaderModule;
284 	PFN_vkCreatePipelineCache vkCreatePipelineCache;
285 	PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
286 	PFN_vkGetPipelineCacheData vkGetPipelineCacheData;
287 	PFN_vkMergePipelineCaches vkMergePipelineCaches;
288 	PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
289 	PFN_vkCreateComputePipelines vkCreateComputePipelines;
290 	PFN_vkDestroyPipeline vkDestroyPipeline;
291 	PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
292 	PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
293 	PFN_vkCreateSampler vkCreateSampler;
294 	PFN_vkDestroySampler vkDestroySampler;
295 	PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
296 	PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
297 	PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
298 	PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
299 	PFN_vkResetDescriptorPool vkResetDescriptorPool;
300 	PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
301 	PFN_vkFreeDescriptorSets vkFreeDescriptorSets;
302 	PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
303 	PFN_vkCreateFramebuffer vkCreateFramebuffer;
304 	PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
305 	PFN_vkCreateRenderPass vkCreateRenderPass;
306 	PFN_vkDestroyRenderPass vkDestroyRenderPass;
307 	PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity;
308 	PFN_vkCreateCommandPool vkCreateCommandPool;
309 	PFN_vkDestroyCommandPool vkDestroyCommandPool;
310 	PFN_vkResetCommandPool vkResetCommandPool;
311 	PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
312 	PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
313 	PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
314 	PFN_vkEndCommandBuffer vkEndCommandBuffer;
315 	PFN_vkResetCommandBuffer vkResetCommandBuffer;
316 	PFN_vkCmdBindPipeline vkCmdBindPipeline;
317 	PFN_vkCmdSetViewport vkCmdSetViewport;
318 	PFN_vkCmdSetScissor vkCmdSetScissor;
319 	PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
320 	PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
321 	PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants;
322 	PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds;
323 	PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
324 	PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
325 	PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
326 	PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
327 	PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
328 	PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
329 	PFN_vkCmdDraw vkCmdDraw;
330 	PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
331 	PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
332 	PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
333 	PFN_vkCmdDispatch vkCmdDispatch;
334 	PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect;
335 	PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
336 	PFN_vkCmdCopyImage vkCmdCopyImage;
337 	PFN_vkCmdBlitImage vkCmdBlitImage;
338 	PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
339 	PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer;
340 	PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer;
341 	PFN_vkCmdFillBuffer vkCmdFillBuffer;
342 	PFN_vkCmdClearColorImage vkCmdClearColorImage;
343 	PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage;
344 	PFN_vkCmdClearAttachments vkCmdClearAttachments;
345 	PFN_vkCmdResolveImage vkCmdResolveImage;
346 	PFN_vkCmdSetEvent vkCmdSetEvent;
347 	PFN_vkCmdResetEvent vkCmdResetEvent;
348 	PFN_vkCmdWaitEvents vkCmdWaitEvents;
349 	PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
350 	PFN_vkCmdBeginQuery vkCmdBeginQuery;
351 	PFN_vkCmdEndQuery vkCmdEndQuery;
352 	PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
353 	PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp;
354 	PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
355 	PFN_vkCmdPushConstants vkCmdPushConstants;
356 	PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
357 	PFN_vkCmdNextSubpass vkCmdNextSubpass;
358 	PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
359 	PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
360 
361 	// VK_KHR_surface
362 	PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
363 	PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR;
364 	PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
365 	PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
366 	PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR;
367 
368 	// VK_KHR_swapchain
369 	PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;
370 	PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
371 	PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
372 	PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
373 	PFN_vkQueuePresentKHR vkQueuePresentKHR;
374 
375 	// VK_KHR_display
376 	PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR;
377 	PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR;
378 	PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR;
379 	PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR;
380 	PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR;
381 	PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR;
382 	PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR;
383 
384 	// VK_KHR_display_swapchain
385 	PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
386 
387 	// VK_KHR_xlib_surface
388 	version(VK_USE_PLATFORM_XLIB_KHR) {
389 		PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR;
390 		PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR;
391 	}
392 
393 	// VK_KHR_xcb_surface
394 	version(VK_USE_PLATFORM_XCB_KHR) {
395 		PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR;
396 		PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR;
397 	}
398 
399 	// VK_KHR_wayland_surface
400 	version(VK_USE_PLATFORM_WAYLAND_KHR) {
401 		PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR;
402 		PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR;
403 	}
404 
405 	// VK_KHR_mir_surface
406 	version(VK_USE_PLATFORM_MIR_KHR) {
407 		PFN_vkCreateMirSurfaceKHR vkCreateMirSurfaceKHR;
408 		PFN_vkGetPhysicalDeviceMirPresentationSupportKHR vkGetPhysicalDeviceMirPresentationSupportKHR;
409 	}
410 
411 	// VK_KHR_android_surface
412 	version(VK_USE_PLATFORM_ANDROID_KHR) {
413 		PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
414 	}
415 
416 	// VK_KHR_win32_surface
417 	version(VK_USE_PLATFORM_WIN32_KHR) {
418 		PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR;
419 		PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR;
420 	}
421 
422 	// VK_EXT_debug_report
423 	PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;
424 	PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;
425 	PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;
426 
427 	// VK_EXT_debug_marker
428 	PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT;
429 	PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT;
430 	PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT;
431 	PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT;
432 	PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT;
433 }
434 
435 /// if not using version "with-derelict-loader" this function must be called first
436 /// sets vkCreateInstance function pointer and acquires basic functions to retrieve information about the implementation
437 void loadGlobalLevelFunctions(typeof(vkGetInstanceProcAddr) getProcAddr) {
438 	vkGetInstanceProcAddr = getProcAddr;
439 	vkEnumerateInstanceExtensionProperties = cast(typeof(vkEnumerateInstanceExtensionProperties)) vkGetInstanceProcAddr(null, "vkEnumerateInstanceExtensionProperties");
440 	vkEnumerateInstanceLayerProperties = cast(typeof(vkEnumerateInstanceLayerProperties)) vkGetInstanceProcAddr(null, "vkEnumerateInstanceLayerProperties");
441 	vkCreateInstance = cast(typeof(vkCreateInstance)) vkGetInstanceProcAddr(null, "vkCreateInstance");
442 }
443 
444 /// with a valid VkInstance call this function to retrieve additional VkInstance, VkPhysicalDevice, ... related functions
445 void loadInstanceLevelFunctions(VkInstance instance) {
446 	assert(vkGetInstanceProcAddr !is null, "Must call loadGlobalLevelFunctions before loadInstanceLevelFunctions");
447 
448 	// VK_VERSION_1_0
449 	vkDestroyInstance = cast(typeof(vkDestroyInstance)) vkGetInstanceProcAddr(instance, "vkDestroyInstance");
450 	vkEnumeratePhysicalDevices = cast(typeof(vkEnumeratePhysicalDevices)) vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDevices");
451 	vkGetPhysicalDeviceFeatures = cast(typeof(vkGetPhysicalDeviceFeatures)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures");
452 	vkGetPhysicalDeviceFormatProperties = cast(typeof(vkGetPhysicalDeviceFormatProperties)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties");
453 	vkGetPhysicalDeviceImageFormatProperties = cast(typeof(vkGetPhysicalDeviceImageFormatProperties)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceImageFormatProperties");
454 	vkGetPhysicalDeviceProperties = cast(typeof(vkGetPhysicalDeviceProperties)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties");
455 	vkGetPhysicalDeviceQueueFamilyProperties = cast(typeof(vkGetPhysicalDeviceQueueFamilyProperties)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties");
456 	vkGetPhysicalDeviceMemoryProperties = cast(typeof(vkGetPhysicalDeviceMemoryProperties)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceMemoryProperties");
457 	vkGetDeviceProcAddr = cast(typeof(vkGetDeviceProcAddr)) vkGetInstanceProcAddr(instance, "vkGetDeviceProcAddr");
458 	vkCreateDevice = cast(typeof(vkCreateDevice)) vkGetInstanceProcAddr(instance, "vkCreateDevice");
459 	vkEnumerateDeviceExtensionProperties = cast(typeof(vkEnumerateDeviceExtensionProperties)) vkGetInstanceProcAddr(instance, "vkEnumerateDeviceExtensionProperties");
460 	vkEnumerateDeviceLayerProperties = cast(typeof(vkEnumerateDeviceLayerProperties)) vkGetInstanceProcAddr(instance, "vkEnumerateDeviceLayerProperties");
461 	vkGetPhysicalDeviceSparseImageFormatProperties = cast(typeof(vkGetPhysicalDeviceSparseImageFormatProperties)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties");
462 
463 	// VK_KHR_surface
464 	vkDestroySurfaceKHR = cast(typeof(vkDestroySurfaceKHR)) vkGetInstanceProcAddr(instance, "vkDestroySurfaceKHR");
465 	vkGetPhysicalDeviceSurfaceSupportKHR = cast(typeof(vkGetPhysicalDeviceSurfaceSupportKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR");
466 	vkGetPhysicalDeviceSurfaceCapabilitiesKHR = cast(typeof(vkGetPhysicalDeviceSurfaceCapabilitiesKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
467 	vkGetPhysicalDeviceSurfaceFormatsKHR = cast(typeof(vkGetPhysicalDeviceSurfaceFormatsKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR");
468 	vkGetPhysicalDeviceSurfacePresentModesKHR = cast(typeof(vkGetPhysicalDeviceSurfacePresentModesKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR");
469 
470 	// VK_KHR_display
471 	vkGetPhysicalDeviceDisplayPropertiesKHR = cast(typeof(vkGetPhysicalDeviceDisplayPropertiesKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceDisplayPropertiesKHR");
472 	vkGetPhysicalDeviceDisplayPlanePropertiesKHR = cast(typeof(vkGetPhysicalDeviceDisplayPlanePropertiesKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
473 	vkGetDisplayPlaneSupportedDisplaysKHR = cast(typeof(vkGetDisplayPlaneSupportedDisplaysKHR)) vkGetInstanceProcAddr(instance, "vkGetDisplayPlaneSupportedDisplaysKHR");
474 	vkGetDisplayModePropertiesKHR = cast(typeof(vkGetDisplayModePropertiesKHR)) vkGetInstanceProcAddr(instance, "vkGetDisplayModePropertiesKHR");
475 	vkCreateDisplayModeKHR = cast(typeof(vkCreateDisplayModeKHR)) vkGetInstanceProcAddr(instance, "vkCreateDisplayModeKHR");
476 	vkGetDisplayPlaneCapabilitiesKHR = cast(typeof(vkGetDisplayPlaneCapabilitiesKHR)) vkGetInstanceProcAddr(instance, "vkGetDisplayPlaneCapabilitiesKHR");
477 	vkCreateDisplayPlaneSurfaceKHR = cast(typeof(vkCreateDisplayPlaneSurfaceKHR)) vkGetInstanceProcAddr(instance, "vkCreateDisplayPlaneSurfaceKHR");
478 
479 	// VK_KHR_xlib_surface
480 	version(VK_USE_PLATFORM_XLIB_KHR) {
481 		vkCreateXlibSurfaceKHR = cast(typeof(vkCreateXlibSurfaceKHR)) vkGetInstanceProcAddr(instance, "vkCreateXlibSurfaceKHR");
482 		vkGetPhysicalDeviceXlibPresentationSupportKHR = cast(typeof(vkGetPhysicalDeviceXlibPresentationSupportKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR");
483 	}
484 
485 	// VK_KHR_xcb_surface
486 	version(VK_USE_PLATFORM_XCB_KHR) {
487 		vkCreateXcbSurfaceKHR = cast(typeof(vkCreateXcbSurfaceKHR)) vkGetInstanceProcAddr(instance, "vkCreateXcbSurfaceKHR");
488 		vkGetPhysicalDeviceXcbPresentationSupportKHR = cast(typeof(vkGetPhysicalDeviceXcbPresentationSupportKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR");
489 	}
490 
491 	// VK_KHR_wayland_surface
492 	version(VK_USE_PLATFORM_WAYLAND_KHR) {
493 		vkCreateWaylandSurfaceKHR = cast(typeof(vkCreateWaylandSurfaceKHR)) vkGetInstanceProcAddr(instance, "vkCreateWaylandSurfaceKHR");
494 		vkGetPhysicalDeviceWaylandPresentationSupportKHR = cast(typeof(vkGetPhysicalDeviceWaylandPresentationSupportKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR");
495 	}
496 
497 	// VK_KHR_mir_surface
498 	version(VK_USE_PLATFORM_MIR_KHR) {
499 		vkCreateMirSurfaceKHR = cast(typeof(vkCreateMirSurfaceKHR)) vkGetInstanceProcAddr(instance, "vkCreateMirSurfaceKHR");
500 		vkGetPhysicalDeviceMirPresentationSupportKHR = cast(typeof(vkGetPhysicalDeviceMirPresentationSupportKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceMirPresentationSupportKHR");
501 	}
502 
503 	// VK_KHR_android_surface
504 	version(VK_USE_PLATFORM_ANDROID_KHR) {
505 		vkCreateAndroidSurfaceKHR = cast(typeof(vkCreateAndroidSurfaceKHR)) vkGetInstanceProcAddr(instance, "vkCreateAndroidSurfaceKHR");
506 	}
507 
508 	// VK_KHR_win32_surface
509 	version(VK_USE_PLATFORM_WIN32_KHR) {
510 		vkCreateWin32SurfaceKHR = cast(typeof(vkCreateWin32SurfaceKHR)) vkGetInstanceProcAddr(instance, "vkCreateWin32SurfaceKHR");
511 		vkGetPhysicalDeviceWin32PresentationSupportKHR = cast(typeof(vkGetPhysicalDeviceWin32PresentationSupportKHR)) vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR");
512 	}
513 
514 	// VK_EXT_debug_report
515 	vkCreateDebugReportCallbackEXT = cast(typeof(vkCreateDebugReportCallbackEXT)) vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT");
516 	vkDestroyDebugReportCallbackEXT = cast(typeof(vkDestroyDebugReportCallbackEXT)) vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT");
517 	vkDebugReportMessageEXT = cast(typeof(vkDebugReportMessageEXT)) vkGetInstanceProcAddr(instance, "vkDebugReportMessageEXT");}
518 
519 /// with a valid VkInstance call this function to retrieve VkDevice, VkQueue and VkCommandBuffer related functions
520 /// the functions call indirectly through the VkInstance and will be internally dispatched by the implementation
521 /// use loadDeviceLevelFunctions(VkDevice device) bellow to avoid this indirection and get the pointers directly form a VkDevice
522 void loadDeviceLevelFunctions(VkInstance instance) {
523 	assert(vkGetInstanceProcAddr !is null, "Must call loadInstanceLevelFunctions before loadDeviceLevelFunctions");
524 
525 	// VK_VERSION_1_0
526 	vkDestroyDevice = cast(typeof(vkDestroyDevice)) vkGetInstanceProcAddr(instance, "vkDestroyDevice");
527 	vkGetDeviceQueue = cast(typeof(vkGetDeviceQueue)) vkGetInstanceProcAddr(instance, "vkGetDeviceQueue");
528 	vkQueueSubmit = cast(typeof(vkQueueSubmit)) vkGetInstanceProcAddr(instance, "vkQueueSubmit");
529 	vkQueueWaitIdle = cast(typeof(vkQueueWaitIdle)) vkGetInstanceProcAddr(instance, "vkQueueWaitIdle");
530 	vkDeviceWaitIdle = cast(typeof(vkDeviceWaitIdle)) vkGetInstanceProcAddr(instance, "vkDeviceWaitIdle");
531 	vkAllocateMemory = cast(typeof(vkAllocateMemory)) vkGetInstanceProcAddr(instance, "vkAllocateMemory");
532 	vkFreeMemory = cast(typeof(vkFreeMemory)) vkGetInstanceProcAddr(instance, "vkFreeMemory");
533 	vkMapMemory = cast(typeof(vkMapMemory)) vkGetInstanceProcAddr(instance, "vkMapMemory");
534 	vkUnmapMemory = cast(typeof(vkUnmapMemory)) vkGetInstanceProcAddr(instance, "vkUnmapMemory");
535 	vkFlushMappedMemoryRanges = cast(typeof(vkFlushMappedMemoryRanges)) vkGetInstanceProcAddr(instance, "vkFlushMappedMemoryRanges");
536 	vkInvalidateMappedMemoryRanges = cast(typeof(vkInvalidateMappedMemoryRanges)) vkGetInstanceProcAddr(instance, "vkInvalidateMappedMemoryRanges");
537 	vkGetDeviceMemoryCommitment = cast(typeof(vkGetDeviceMemoryCommitment)) vkGetInstanceProcAddr(instance, "vkGetDeviceMemoryCommitment");
538 	vkBindBufferMemory = cast(typeof(vkBindBufferMemory)) vkGetInstanceProcAddr(instance, "vkBindBufferMemory");
539 	vkBindImageMemory = cast(typeof(vkBindImageMemory)) vkGetInstanceProcAddr(instance, "vkBindImageMemory");
540 	vkGetBufferMemoryRequirements = cast(typeof(vkGetBufferMemoryRequirements)) vkGetInstanceProcAddr(instance, "vkGetBufferMemoryRequirements");
541 	vkGetImageMemoryRequirements = cast(typeof(vkGetImageMemoryRequirements)) vkGetInstanceProcAddr(instance, "vkGetImageMemoryRequirements");
542 	vkGetImageSparseMemoryRequirements = cast(typeof(vkGetImageSparseMemoryRequirements)) vkGetInstanceProcAddr(instance, "vkGetImageSparseMemoryRequirements");
543 	vkQueueBindSparse = cast(typeof(vkQueueBindSparse)) vkGetInstanceProcAddr(instance, "vkQueueBindSparse");
544 	vkCreateFence = cast(typeof(vkCreateFence)) vkGetInstanceProcAddr(instance, "vkCreateFence");
545 	vkDestroyFence = cast(typeof(vkDestroyFence)) vkGetInstanceProcAddr(instance, "vkDestroyFence");
546 	vkResetFences = cast(typeof(vkResetFences)) vkGetInstanceProcAddr(instance, "vkResetFences");
547 	vkGetFenceStatus = cast(typeof(vkGetFenceStatus)) vkGetInstanceProcAddr(instance, "vkGetFenceStatus");
548 	vkWaitForFences = cast(typeof(vkWaitForFences)) vkGetInstanceProcAddr(instance, "vkWaitForFences");
549 	vkCreateSemaphore = cast(typeof(vkCreateSemaphore)) vkGetInstanceProcAddr(instance, "vkCreateSemaphore");
550 	vkDestroySemaphore = cast(typeof(vkDestroySemaphore)) vkGetInstanceProcAddr(instance, "vkDestroySemaphore");
551 	vkCreateEvent = cast(typeof(vkCreateEvent)) vkGetInstanceProcAddr(instance, "vkCreateEvent");
552 	vkDestroyEvent = cast(typeof(vkDestroyEvent)) vkGetInstanceProcAddr(instance, "vkDestroyEvent");
553 	vkGetEventStatus = cast(typeof(vkGetEventStatus)) vkGetInstanceProcAddr(instance, "vkGetEventStatus");
554 	vkSetEvent = cast(typeof(vkSetEvent)) vkGetInstanceProcAddr(instance, "vkSetEvent");
555 	vkResetEvent = cast(typeof(vkResetEvent)) vkGetInstanceProcAddr(instance, "vkResetEvent");
556 	vkCreateQueryPool = cast(typeof(vkCreateQueryPool)) vkGetInstanceProcAddr(instance, "vkCreateQueryPool");
557 	vkDestroyQueryPool = cast(typeof(vkDestroyQueryPool)) vkGetInstanceProcAddr(instance, "vkDestroyQueryPool");
558 	vkGetQueryPoolResults = cast(typeof(vkGetQueryPoolResults)) vkGetInstanceProcAddr(instance, "vkGetQueryPoolResults");
559 	vkCreateBuffer = cast(typeof(vkCreateBuffer)) vkGetInstanceProcAddr(instance, "vkCreateBuffer");
560 	vkDestroyBuffer = cast(typeof(vkDestroyBuffer)) vkGetInstanceProcAddr(instance, "vkDestroyBuffer");
561 	vkCreateBufferView = cast(typeof(vkCreateBufferView)) vkGetInstanceProcAddr(instance, "vkCreateBufferView");
562 	vkDestroyBufferView = cast(typeof(vkDestroyBufferView)) vkGetInstanceProcAddr(instance, "vkDestroyBufferView");
563 	vkCreateImage = cast(typeof(vkCreateImage)) vkGetInstanceProcAddr(instance, "vkCreateImage");
564 	vkDestroyImage = cast(typeof(vkDestroyImage)) vkGetInstanceProcAddr(instance, "vkDestroyImage");
565 	vkGetImageSubresourceLayout = cast(typeof(vkGetImageSubresourceLayout)) vkGetInstanceProcAddr(instance, "vkGetImageSubresourceLayout");
566 	vkCreateImageView = cast(typeof(vkCreateImageView)) vkGetInstanceProcAddr(instance, "vkCreateImageView");
567 	vkDestroyImageView = cast(typeof(vkDestroyImageView)) vkGetInstanceProcAddr(instance, "vkDestroyImageView");
568 	vkCreateShaderModule = cast(typeof(vkCreateShaderModule)) vkGetInstanceProcAddr(instance, "vkCreateShaderModule");
569 	vkDestroyShaderModule = cast(typeof(vkDestroyShaderModule)) vkGetInstanceProcAddr(instance, "vkDestroyShaderModule");
570 	vkCreatePipelineCache = cast(typeof(vkCreatePipelineCache)) vkGetInstanceProcAddr(instance, "vkCreatePipelineCache");
571 	vkDestroyPipelineCache = cast(typeof(vkDestroyPipelineCache)) vkGetInstanceProcAddr(instance, "vkDestroyPipelineCache");
572 	vkGetPipelineCacheData = cast(typeof(vkGetPipelineCacheData)) vkGetInstanceProcAddr(instance, "vkGetPipelineCacheData");
573 	vkMergePipelineCaches = cast(typeof(vkMergePipelineCaches)) vkGetInstanceProcAddr(instance, "vkMergePipelineCaches");
574 	vkCreateGraphicsPipelines = cast(typeof(vkCreateGraphicsPipelines)) vkGetInstanceProcAddr(instance, "vkCreateGraphicsPipelines");
575 	vkCreateComputePipelines = cast(typeof(vkCreateComputePipelines)) vkGetInstanceProcAddr(instance, "vkCreateComputePipelines");
576 	vkDestroyPipeline = cast(typeof(vkDestroyPipeline)) vkGetInstanceProcAddr(instance, "vkDestroyPipeline");
577 	vkCreatePipelineLayout = cast(typeof(vkCreatePipelineLayout)) vkGetInstanceProcAddr(instance, "vkCreatePipelineLayout");
578 	vkDestroyPipelineLayout = cast(typeof(vkDestroyPipelineLayout)) vkGetInstanceProcAddr(instance, "vkDestroyPipelineLayout");
579 	vkCreateSampler = cast(typeof(vkCreateSampler)) vkGetInstanceProcAddr(instance, "vkCreateSampler");
580 	vkDestroySampler = cast(typeof(vkDestroySampler)) vkGetInstanceProcAddr(instance, "vkDestroySampler");
581 	vkCreateDescriptorSetLayout = cast(typeof(vkCreateDescriptorSetLayout)) vkGetInstanceProcAddr(instance, "vkCreateDescriptorSetLayout");
582 	vkDestroyDescriptorSetLayout = cast(typeof(vkDestroyDescriptorSetLayout)) vkGetInstanceProcAddr(instance, "vkDestroyDescriptorSetLayout");
583 	vkCreateDescriptorPool = cast(typeof(vkCreateDescriptorPool)) vkGetInstanceProcAddr(instance, "vkCreateDescriptorPool");
584 	vkDestroyDescriptorPool = cast(typeof(vkDestroyDescriptorPool)) vkGetInstanceProcAddr(instance, "vkDestroyDescriptorPool");
585 	vkResetDescriptorPool = cast(typeof(vkResetDescriptorPool)) vkGetInstanceProcAddr(instance, "vkResetDescriptorPool");
586 	vkAllocateDescriptorSets = cast(typeof(vkAllocateDescriptorSets)) vkGetInstanceProcAddr(instance, "vkAllocateDescriptorSets");
587 	vkFreeDescriptorSets = cast(typeof(vkFreeDescriptorSets)) vkGetInstanceProcAddr(instance, "vkFreeDescriptorSets");
588 	vkUpdateDescriptorSets = cast(typeof(vkUpdateDescriptorSets)) vkGetInstanceProcAddr(instance, "vkUpdateDescriptorSets");
589 	vkCreateFramebuffer = cast(typeof(vkCreateFramebuffer)) vkGetInstanceProcAddr(instance, "vkCreateFramebuffer");
590 	vkDestroyFramebuffer = cast(typeof(vkDestroyFramebuffer)) vkGetInstanceProcAddr(instance, "vkDestroyFramebuffer");
591 	vkCreateRenderPass = cast(typeof(vkCreateRenderPass)) vkGetInstanceProcAddr(instance, "vkCreateRenderPass");
592 	vkDestroyRenderPass = cast(typeof(vkDestroyRenderPass)) vkGetInstanceProcAddr(instance, "vkDestroyRenderPass");
593 	vkGetRenderAreaGranularity = cast(typeof(vkGetRenderAreaGranularity)) vkGetInstanceProcAddr(instance, "vkGetRenderAreaGranularity");
594 	vkCreateCommandPool = cast(typeof(vkCreateCommandPool)) vkGetInstanceProcAddr(instance, "vkCreateCommandPool");
595 	vkDestroyCommandPool = cast(typeof(vkDestroyCommandPool)) vkGetInstanceProcAddr(instance, "vkDestroyCommandPool");
596 	vkResetCommandPool = cast(typeof(vkResetCommandPool)) vkGetInstanceProcAddr(instance, "vkResetCommandPool");
597 	vkAllocateCommandBuffers = cast(typeof(vkAllocateCommandBuffers)) vkGetInstanceProcAddr(instance, "vkAllocateCommandBuffers");
598 	vkFreeCommandBuffers = cast(typeof(vkFreeCommandBuffers)) vkGetInstanceProcAddr(instance, "vkFreeCommandBuffers");
599 	vkBeginCommandBuffer = cast(typeof(vkBeginCommandBuffer)) vkGetInstanceProcAddr(instance, "vkBeginCommandBuffer");
600 	vkEndCommandBuffer = cast(typeof(vkEndCommandBuffer)) vkGetInstanceProcAddr(instance, "vkEndCommandBuffer");
601 	vkResetCommandBuffer = cast(typeof(vkResetCommandBuffer)) vkGetInstanceProcAddr(instance, "vkResetCommandBuffer");
602 	vkCmdBindPipeline = cast(typeof(vkCmdBindPipeline)) vkGetInstanceProcAddr(instance, "vkCmdBindPipeline");
603 	vkCmdSetViewport = cast(typeof(vkCmdSetViewport)) vkGetInstanceProcAddr(instance, "vkCmdSetViewport");
604 	vkCmdSetScissor = cast(typeof(vkCmdSetScissor)) vkGetInstanceProcAddr(instance, "vkCmdSetScissor");
605 	vkCmdSetLineWidth = cast(typeof(vkCmdSetLineWidth)) vkGetInstanceProcAddr(instance, "vkCmdSetLineWidth");
606 	vkCmdSetDepthBias = cast(typeof(vkCmdSetDepthBias)) vkGetInstanceProcAddr(instance, "vkCmdSetDepthBias");
607 	vkCmdSetBlendConstants = cast(typeof(vkCmdSetBlendConstants)) vkGetInstanceProcAddr(instance, "vkCmdSetBlendConstants");
608 	vkCmdSetDepthBounds = cast(typeof(vkCmdSetDepthBounds)) vkGetInstanceProcAddr(instance, "vkCmdSetDepthBounds");
609 	vkCmdSetStencilCompareMask = cast(typeof(vkCmdSetStencilCompareMask)) vkGetInstanceProcAddr(instance, "vkCmdSetStencilCompareMask");
610 	vkCmdSetStencilWriteMask = cast(typeof(vkCmdSetStencilWriteMask)) vkGetInstanceProcAddr(instance, "vkCmdSetStencilWriteMask");
611 	vkCmdSetStencilReference = cast(typeof(vkCmdSetStencilReference)) vkGetInstanceProcAddr(instance, "vkCmdSetStencilReference");
612 	vkCmdBindDescriptorSets = cast(typeof(vkCmdBindDescriptorSets)) vkGetInstanceProcAddr(instance, "vkCmdBindDescriptorSets");
613 	vkCmdBindIndexBuffer = cast(typeof(vkCmdBindIndexBuffer)) vkGetInstanceProcAddr(instance, "vkCmdBindIndexBuffer");
614 	vkCmdBindVertexBuffers = cast(typeof(vkCmdBindVertexBuffers)) vkGetInstanceProcAddr(instance, "vkCmdBindVertexBuffers");
615 	vkCmdDraw = cast(typeof(vkCmdDraw)) vkGetInstanceProcAddr(instance, "vkCmdDraw");
616 	vkCmdDrawIndexed = cast(typeof(vkCmdDrawIndexed)) vkGetInstanceProcAddr(instance, "vkCmdDrawIndexed");
617 	vkCmdDrawIndirect = cast(typeof(vkCmdDrawIndirect)) vkGetInstanceProcAddr(instance, "vkCmdDrawIndirect");
618 	vkCmdDrawIndexedIndirect = cast(typeof(vkCmdDrawIndexedIndirect)) vkGetInstanceProcAddr(instance, "vkCmdDrawIndexedIndirect");
619 	vkCmdDispatch = cast(typeof(vkCmdDispatch)) vkGetInstanceProcAddr(instance, "vkCmdDispatch");
620 	vkCmdDispatchIndirect = cast(typeof(vkCmdDispatchIndirect)) vkGetInstanceProcAddr(instance, "vkCmdDispatchIndirect");
621 	vkCmdCopyBuffer = cast(typeof(vkCmdCopyBuffer)) vkGetInstanceProcAddr(instance, "vkCmdCopyBuffer");
622 	vkCmdCopyImage = cast(typeof(vkCmdCopyImage)) vkGetInstanceProcAddr(instance, "vkCmdCopyImage");
623 	vkCmdBlitImage = cast(typeof(vkCmdBlitImage)) vkGetInstanceProcAddr(instance, "vkCmdBlitImage");
624 	vkCmdCopyBufferToImage = cast(typeof(vkCmdCopyBufferToImage)) vkGetInstanceProcAddr(instance, "vkCmdCopyBufferToImage");
625 	vkCmdCopyImageToBuffer = cast(typeof(vkCmdCopyImageToBuffer)) vkGetInstanceProcAddr(instance, "vkCmdCopyImageToBuffer");
626 	vkCmdUpdateBuffer = cast(typeof(vkCmdUpdateBuffer)) vkGetInstanceProcAddr(instance, "vkCmdUpdateBuffer");
627 	vkCmdFillBuffer = cast(typeof(vkCmdFillBuffer)) vkGetInstanceProcAddr(instance, "vkCmdFillBuffer");
628 	vkCmdClearColorImage = cast(typeof(vkCmdClearColorImage)) vkGetInstanceProcAddr(instance, "vkCmdClearColorImage");
629 	vkCmdClearDepthStencilImage = cast(typeof(vkCmdClearDepthStencilImage)) vkGetInstanceProcAddr(instance, "vkCmdClearDepthStencilImage");
630 	vkCmdClearAttachments = cast(typeof(vkCmdClearAttachments)) vkGetInstanceProcAddr(instance, "vkCmdClearAttachments");
631 	vkCmdResolveImage = cast(typeof(vkCmdResolveImage)) vkGetInstanceProcAddr(instance, "vkCmdResolveImage");
632 	vkCmdSetEvent = cast(typeof(vkCmdSetEvent)) vkGetInstanceProcAddr(instance, "vkCmdSetEvent");
633 	vkCmdResetEvent = cast(typeof(vkCmdResetEvent)) vkGetInstanceProcAddr(instance, "vkCmdResetEvent");
634 	vkCmdWaitEvents = cast(typeof(vkCmdWaitEvents)) vkGetInstanceProcAddr(instance, "vkCmdWaitEvents");
635 	vkCmdPipelineBarrier = cast(typeof(vkCmdPipelineBarrier)) vkGetInstanceProcAddr(instance, "vkCmdPipelineBarrier");
636 	vkCmdBeginQuery = cast(typeof(vkCmdBeginQuery)) vkGetInstanceProcAddr(instance, "vkCmdBeginQuery");
637 	vkCmdEndQuery = cast(typeof(vkCmdEndQuery)) vkGetInstanceProcAddr(instance, "vkCmdEndQuery");
638 	vkCmdResetQueryPool = cast(typeof(vkCmdResetQueryPool)) vkGetInstanceProcAddr(instance, "vkCmdResetQueryPool");
639 	vkCmdWriteTimestamp = cast(typeof(vkCmdWriteTimestamp)) vkGetInstanceProcAddr(instance, "vkCmdWriteTimestamp");
640 	vkCmdCopyQueryPoolResults = cast(typeof(vkCmdCopyQueryPoolResults)) vkGetInstanceProcAddr(instance, "vkCmdCopyQueryPoolResults");
641 	vkCmdPushConstants = cast(typeof(vkCmdPushConstants)) vkGetInstanceProcAddr(instance, "vkCmdPushConstants");
642 	vkCmdBeginRenderPass = cast(typeof(vkCmdBeginRenderPass)) vkGetInstanceProcAddr(instance, "vkCmdBeginRenderPass");
643 	vkCmdNextSubpass = cast(typeof(vkCmdNextSubpass)) vkGetInstanceProcAddr(instance, "vkCmdNextSubpass");
644 	vkCmdEndRenderPass = cast(typeof(vkCmdEndRenderPass)) vkGetInstanceProcAddr(instance, "vkCmdEndRenderPass");
645 	vkCmdExecuteCommands = cast(typeof(vkCmdExecuteCommands)) vkGetInstanceProcAddr(instance, "vkCmdExecuteCommands");
646 
647 	// VK_KHR_swapchain
648 	vkCreateSwapchainKHR = cast(typeof(vkCreateSwapchainKHR)) vkGetInstanceProcAddr(instance, "vkCreateSwapchainKHR");
649 	vkDestroySwapchainKHR = cast(typeof(vkDestroySwapchainKHR)) vkGetInstanceProcAddr(instance, "vkDestroySwapchainKHR");
650 	vkGetSwapchainImagesKHR = cast(typeof(vkGetSwapchainImagesKHR)) vkGetInstanceProcAddr(instance, "vkGetSwapchainImagesKHR");
651 	vkAcquireNextImageKHR = cast(typeof(vkAcquireNextImageKHR)) vkGetInstanceProcAddr(instance, "vkAcquireNextImageKHR");
652 	vkQueuePresentKHR = cast(typeof(vkQueuePresentKHR)) vkGetInstanceProcAddr(instance, "vkQueuePresentKHR");
653 
654 	// VK_KHR_display_swapchain
655 	vkCreateSharedSwapchainsKHR = cast(typeof(vkCreateSharedSwapchainsKHR)) vkGetInstanceProcAddr(instance, "vkCreateSharedSwapchainsKHR");
656 
657 	// VK_EXT_debug_marker
658 	vkDebugMarkerSetObjectTagEXT = cast(typeof(vkDebugMarkerSetObjectTagEXT)) vkGetInstanceProcAddr(instance, "vkDebugMarkerSetObjectTagEXT");
659 	vkDebugMarkerSetObjectNameEXT = cast(typeof(vkDebugMarkerSetObjectNameEXT)) vkGetInstanceProcAddr(instance, "vkDebugMarkerSetObjectNameEXT");
660 	vkCmdDebugMarkerBeginEXT = cast(typeof(vkCmdDebugMarkerBeginEXT)) vkGetInstanceProcAddr(instance, "vkCmdDebugMarkerBeginEXT");
661 	vkCmdDebugMarkerEndEXT = cast(typeof(vkCmdDebugMarkerEndEXT)) vkGetInstanceProcAddr(instance, "vkCmdDebugMarkerEndEXT");
662 	vkCmdDebugMarkerInsertEXT = cast(typeof(vkCmdDebugMarkerInsertEXT)) vkGetInstanceProcAddr(instance, "vkCmdDebugMarkerInsertEXT");}
663 
664 /// with a valid VkDevice call this function to retrieve VkDevice, VkQueue and VkCommandBuffer related functions
665 /// the functions call directly VkDevice and related resources and can be retrieved for one and only one VkDevice
666 /// calling this function again with another VkDevices will overwrite the __gshared functions retrieved previously
667 /// use createGroupedDeviceLevelFunctions bellow if usage of multiple VkDevices is required
668 void loadDeviceLevelFunctions(VkDevice device) {
669 	assert(vkGetDeviceProcAddr !is null, "Must call loadInstanceLevelFunctions before loadDeviceLevelFunctions");
670 
671 	// VK_VERSION_1_0
672 	vkDestroyDevice = cast(typeof(vkDestroyDevice)) vkGetDeviceProcAddr(device, "vkDestroyDevice");
673 	vkGetDeviceQueue = cast(typeof(vkGetDeviceQueue)) vkGetDeviceProcAddr(device, "vkGetDeviceQueue");
674 	vkQueueSubmit = cast(typeof(vkQueueSubmit)) vkGetDeviceProcAddr(device, "vkQueueSubmit");
675 	vkQueueWaitIdle = cast(typeof(vkQueueWaitIdle)) vkGetDeviceProcAddr(device, "vkQueueWaitIdle");
676 	vkDeviceWaitIdle = cast(typeof(vkDeviceWaitIdle)) vkGetDeviceProcAddr(device, "vkDeviceWaitIdle");
677 	vkAllocateMemory = cast(typeof(vkAllocateMemory)) vkGetDeviceProcAddr(device, "vkAllocateMemory");
678 	vkFreeMemory = cast(typeof(vkFreeMemory)) vkGetDeviceProcAddr(device, "vkFreeMemory");
679 	vkMapMemory = cast(typeof(vkMapMemory)) vkGetDeviceProcAddr(device, "vkMapMemory");
680 	vkUnmapMemory = cast(typeof(vkUnmapMemory)) vkGetDeviceProcAddr(device, "vkUnmapMemory");
681 	vkFlushMappedMemoryRanges = cast(typeof(vkFlushMappedMemoryRanges)) vkGetDeviceProcAddr(device, "vkFlushMappedMemoryRanges");
682 	vkInvalidateMappedMemoryRanges = cast(typeof(vkInvalidateMappedMemoryRanges)) vkGetDeviceProcAddr(device, "vkInvalidateMappedMemoryRanges");
683 	vkGetDeviceMemoryCommitment = cast(typeof(vkGetDeviceMemoryCommitment)) vkGetDeviceProcAddr(device, "vkGetDeviceMemoryCommitment");
684 	vkBindBufferMemory = cast(typeof(vkBindBufferMemory)) vkGetDeviceProcAddr(device, "vkBindBufferMemory");
685 	vkBindImageMemory = cast(typeof(vkBindImageMemory)) vkGetDeviceProcAddr(device, "vkBindImageMemory");
686 	vkGetBufferMemoryRequirements = cast(typeof(vkGetBufferMemoryRequirements)) vkGetDeviceProcAddr(device, "vkGetBufferMemoryRequirements");
687 	vkGetImageMemoryRequirements = cast(typeof(vkGetImageMemoryRequirements)) vkGetDeviceProcAddr(device, "vkGetImageMemoryRequirements");
688 	vkGetImageSparseMemoryRequirements = cast(typeof(vkGetImageSparseMemoryRequirements)) vkGetDeviceProcAddr(device, "vkGetImageSparseMemoryRequirements");
689 	vkQueueBindSparse = cast(typeof(vkQueueBindSparse)) vkGetDeviceProcAddr(device, "vkQueueBindSparse");
690 	vkCreateFence = cast(typeof(vkCreateFence)) vkGetDeviceProcAddr(device, "vkCreateFence");
691 	vkDestroyFence = cast(typeof(vkDestroyFence)) vkGetDeviceProcAddr(device, "vkDestroyFence");
692 	vkResetFences = cast(typeof(vkResetFences)) vkGetDeviceProcAddr(device, "vkResetFences");
693 	vkGetFenceStatus = cast(typeof(vkGetFenceStatus)) vkGetDeviceProcAddr(device, "vkGetFenceStatus");
694 	vkWaitForFences = cast(typeof(vkWaitForFences)) vkGetDeviceProcAddr(device, "vkWaitForFences");
695 	vkCreateSemaphore = cast(typeof(vkCreateSemaphore)) vkGetDeviceProcAddr(device, "vkCreateSemaphore");
696 	vkDestroySemaphore = cast(typeof(vkDestroySemaphore)) vkGetDeviceProcAddr(device, "vkDestroySemaphore");
697 	vkCreateEvent = cast(typeof(vkCreateEvent)) vkGetDeviceProcAddr(device, "vkCreateEvent");
698 	vkDestroyEvent = cast(typeof(vkDestroyEvent)) vkGetDeviceProcAddr(device, "vkDestroyEvent");
699 	vkGetEventStatus = cast(typeof(vkGetEventStatus)) vkGetDeviceProcAddr(device, "vkGetEventStatus");
700 	vkSetEvent = cast(typeof(vkSetEvent)) vkGetDeviceProcAddr(device, "vkSetEvent");
701 	vkResetEvent = cast(typeof(vkResetEvent)) vkGetDeviceProcAddr(device, "vkResetEvent");
702 	vkCreateQueryPool = cast(typeof(vkCreateQueryPool)) vkGetDeviceProcAddr(device, "vkCreateQueryPool");
703 	vkDestroyQueryPool = cast(typeof(vkDestroyQueryPool)) vkGetDeviceProcAddr(device, "vkDestroyQueryPool");
704 	vkGetQueryPoolResults = cast(typeof(vkGetQueryPoolResults)) vkGetDeviceProcAddr(device, "vkGetQueryPoolResults");
705 	vkCreateBuffer = cast(typeof(vkCreateBuffer)) vkGetDeviceProcAddr(device, "vkCreateBuffer");
706 	vkDestroyBuffer = cast(typeof(vkDestroyBuffer)) vkGetDeviceProcAddr(device, "vkDestroyBuffer");
707 	vkCreateBufferView = cast(typeof(vkCreateBufferView)) vkGetDeviceProcAddr(device, "vkCreateBufferView");
708 	vkDestroyBufferView = cast(typeof(vkDestroyBufferView)) vkGetDeviceProcAddr(device, "vkDestroyBufferView");
709 	vkCreateImage = cast(typeof(vkCreateImage)) vkGetDeviceProcAddr(device, "vkCreateImage");
710 	vkDestroyImage = cast(typeof(vkDestroyImage)) vkGetDeviceProcAddr(device, "vkDestroyImage");
711 	vkGetImageSubresourceLayout = cast(typeof(vkGetImageSubresourceLayout)) vkGetDeviceProcAddr(device, "vkGetImageSubresourceLayout");
712 	vkCreateImageView = cast(typeof(vkCreateImageView)) vkGetDeviceProcAddr(device, "vkCreateImageView");
713 	vkDestroyImageView = cast(typeof(vkDestroyImageView)) vkGetDeviceProcAddr(device, "vkDestroyImageView");
714 	vkCreateShaderModule = cast(typeof(vkCreateShaderModule)) vkGetDeviceProcAddr(device, "vkCreateShaderModule");
715 	vkDestroyShaderModule = cast(typeof(vkDestroyShaderModule)) vkGetDeviceProcAddr(device, "vkDestroyShaderModule");
716 	vkCreatePipelineCache = cast(typeof(vkCreatePipelineCache)) vkGetDeviceProcAddr(device, "vkCreatePipelineCache");
717 	vkDestroyPipelineCache = cast(typeof(vkDestroyPipelineCache)) vkGetDeviceProcAddr(device, "vkDestroyPipelineCache");
718 	vkGetPipelineCacheData = cast(typeof(vkGetPipelineCacheData)) vkGetDeviceProcAddr(device, "vkGetPipelineCacheData");
719 	vkMergePipelineCaches = cast(typeof(vkMergePipelineCaches)) vkGetDeviceProcAddr(device, "vkMergePipelineCaches");
720 	vkCreateGraphicsPipelines = cast(typeof(vkCreateGraphicsPipelines)) vkGetDeviceProcAddr(device, "vkCreateGraphicsPipelines");
721 	vkCreateComputePipelines = cast(typeof(vkCreateComputePipelines)) vkGetDeviceProcAddr(device, "vkCreateComputePipelines");
722 	vkDestroyPipeline = cast(typeof(vkDestroyPipeline)) vkGetDeviceProcAddr(device, "vkDestroyPipeline");
723 	vkCreatePipelineLayout = cast(typeof(vkCreatePipelineLayout)) vkGetDeviceProcAddr(device, "vkCreatePipelineLayout");
724 	vkDestroyPipelineLayout = cast(typeof(vkDestroyPipelineLayout)) vkGetDeviceProcAddr(device, "vkDestroyPipelineLayout");
725 	vkCreateSampler = cast(typeof(vkCreateSampler)) vkGetDeviceProcAddr(device, "vkCreateSampler");
726 	vkDestroySampler = cast(typeof(vkDestroySampler)) vkGetDeviceProcAddr(device, "vkDestroySampler");
727 	vkCreateDescriptorSetLayout = cast(typeof(vkCreateDescriptorSetLayout)) vkGetDeviceProcAddr(device, "vkCreateDescriptorSetLayout");
728 	vkDestroyDescriptorSetLayout = cast(typeof(vkDestroyDescriptorSetLayout)) vkGetDeviceProcAddr(device, "vkDestroyDescriptorSetLayout");
729 	vkCreateDescriptorPool = cast(typeof(vkCreateDescriptorPool)) vkGetDeviceProcAddr(device, "vkCreateDescriptorPool");
730 	vkDestroyDescriptorPool = cast(typeof(vkDestroyDescriptorPool)) vkGetDeviceProcAddr(device, "vkDestroyDescriptorPool");
731 	vkResetDescriptorPool = cast(typeof(vkResetDescriptorPool)) vkGetDeviceProcAddr(device, "vkResetDescriptorPool");
732 	vkAllocateDescriptorSets = cast(typeof(vkAllocateDescriptorSets)) vkGetDeviceProcAddr(device, "vkAllocateDescriptorSets");
733 	vkFreeDescriptorSets = cast(typeof(vkFreeDescriptorSets)) vkGetDeviceProcAddr(device, "vkFreeDescriptorSets");
734 	vkUpdateDescriptorSets = cast(typeof(vkUpdateDescriptorSets)) vkGetDeviceProcAddr(device, "vkUpdateDescriptorSets");
735 	vkCreateFramebuffer = cast(typeof(vkCreateFramebuffer)) vkGetDeviceProcAddr(device, "vkCreateFramebuffer");
736 	vkDestroyFramebuffer = cast(typeof(vkDestroyFramebuffer)) vkGetDeviceProcAddr(device, "vkDestroyFramebuffer");
737 	vkCreateRenderPass = cast(typeof(vkCreateRenderPass)) vkGetDeviceProcAddr(device, "vkCreateRenderPass");
738 	vkDestroyRenderPass = cast(typeof(vkDestroyRenderPass)) vkGetDeviceProcAddr(device, "vkDestroyRenderPass");
739 	vkGetRenderAreaGranularity = cast(typeof(vkGetRenderAreaGranularity)) vkGetDeviceProcAddr(device, "vkGetRenderAreaGranularity");
740 	vkCreateCommandPool = cast(typeof(vkCreateCommandPool)) vkGetDeviceProcAddr(device, "vkCreateCommandPool");
741 	vkDestroyCommandPool = cast(typeof(vkDestroyCommandPool)) vkGetDeviceProcAddr(device, "vkDestroyCommandPool");
742 	vkResetCommandPool = cast(typeof(vkResetCommandPool)) vkGetDeviceProcAddr(device, "vkResetCommandPool");
743 	vkAllocateCommandBuffers = cast(typeof(vkAllocateCommandBuffers)) vkGetDeviceProcAddr(device, "vkAllocateCommandBuffers");
744 	vkFreeCommandBuffers = cast(typeof(vkFreeCommandBuffers)) vkGetDeviceProcAddr(device, "vkFreeCommandBuffers");
745 	vkBeginCommandBuffer = cast(typeof(vkBeginCommandBuffer)) vkGetDeviceProcAddr(device, "vkBeginCommandBuffer");
746 	vkEndCommandBuffer = cast(typeof(vkEndCommandBuffer)) vkGetDeviceProcAddr(device, "vkEndCommandBuffer");
747 	vkResetCommandBuffer = cast(typeof(vkResetCommandBuffer)) vkGetDeviceProcAddr(device, "vkResetCommandBuffer");
748 	vkCmdBindPipeline = cast(typeof(vkCmdBindPipeline)) vkGetDeviceProcAddr(device, "vkCmdBindPipeline");
749 	vkCmdSetViewport = cast(typeof(vkCmdSetViewport)) vkGetDeviceProcAddr(device, "vkCmdSetViewport");
750 	vkCmdSetScissor = cast(typeof(vkCmdSetScissor)) vkGetDeviceProcAddr(device, "vkCmdSetScissor");
751 	vkCmdSetLineWidth = cast(typeof(vkCmdSetLineWidth)) vkGetDeviceProcAddr(device, "vkCmdSetLineWidth");
752 	vkCmdSetDepthBias = cast(typeof(vkCmdSetDepthBias)) vkGetDeviceProcAddr(device, "vkCmdSetDepthBias");
753 	vkCmdSetBlendConstants = cast(typeof(vkCmdSetBlendConstants)) vkGetDeviceProcAddr(device, "vkCmdSetBlendConstants");
754 	vkCmdSetDepthBounds = cast(typeof(vkCmdSetDepthBounds)) vkGetDeviceProcAddr(device, "vkCmdSetDepthBounds");
755 	vkCmdSetStencilCompareMask = cast(typeof(vkCmdSetStencilCompareMask)) vkGetDeviceProcAddr(device, "vkCmdSetStencilCompareMask");
756 	vkCmdSetStencilWriteMask = cast(typeof(vkCmdSetStencilWriteMask)) vkGetDeviceProcAddr(device, "vkCmdSetStencilWriteMask");
757 	vkCmdSetStencilReference = cast(typeof(vkCmdSetStencilReference)) vkGetDeviceProcAddr(device, "vkCmdSetStencilReference");
758 	vkCmdBindDescriptorSets = cast(typeof(vkCmdBindDescriptorSets)) vkGetDeviceProcAddr(device, "vkCmdBindDescriptorSets");
759 	vkCmdBindIndexBuffer = cast(typeof(vkCmdBindIndexBuffer)) vkGetDeviceProcAddr(device, "vkCmdBindIndexBuffer");
760 	vkCmdBindVertexBuffers = cast(typeof(vkCmdBindVertexBuffers)) vkGetDeviceProcAddr(device, "vkCmdBindVertexBuffers");
761 	vkCmdDraw = cast(typeof(vkCmdDraw)) vkGetDeviceProcAddr(device, "vkCmdDraw");
762 	vkCmdDrawIndexed = cast(typeof(vkCmdDrawIndexed)) vkGetDeviceProcAddr(device, "vkCmdDrawIndexed");
763 	vkCmdDrawIndirect = cast(typeof(vkCmdDrawIndirect)) vkGetDeviceProcAddr(device, "vkCmdDrawIndirect");
764 	vkCmdDrawIndexedIndirect = cast(typeof(vkCmdDrawIndexedIndirect)) vkGetDeviceProcAddr(device, "vkCmdDrawIndexedIndirect");
765 	vkCmdDispatch = cast(typeof(vkCmdDispatch)) vkGetDeviceProcAddr(device, "vkCmdDispatch");
766 	vkCmdDispatchIndirect = cast(typeof(vkCmdDispatchIndirect)) vkGetDeviceProcAddr(device, "vkCmdDispatchIndirect");
767 	vkCmdCopyBuffer = cast(typeof(vkCmdCopyBuffer)) vkGetDeviceProcAddr(device, "vkCmdCopyBuffer");
768 	vkCmdCopyImage = cast(typeof(vkCmdCopyImage)) vkGetDeviceProcAddr(device, "vkCmdCopyImage");
769 	vkCmdBlitImage = cast(typeof(vkCmdBlitImage)) vkGetDeviceProcAddr(device, "vkCmdBlitImage");
770 	vkCmdCopyBufferToImage = cast(typeof(vkCmdCopyBufferToImage)) vkGetDeviceProcAddr(device, "vkCmdCopyBufferToImage");
771 	vkCmdCopyImageToBuffer = cast(typeof(vkCmdCopyImageToBuffer)) vkGetDeviceProcAddr(device, "vkCmdCopyImageToBuffer");
772 	vkCmdUpdateBuffer = cast(typeof(vkCmdUpdateBuffer)) vkGetDeviceProcAddr(device, "vkCmdUpdateBuffer");
773 	vkCmdFillBuffer = cast(typeof(vkCmdFillBuffer)) vkGetDeviceProcAddr(device, "vkCmdFillBuffer");
774 	vkCmdClearColorImage = cast(typeof(vkCmdClearColorImage)) vkGetDeviceProcAddr(device, "vkCmdClearColorImage");
775 	vkCmdClearDepthStencilImage = cast(typeof(vkCmdClearDepthStencilImage)) vkGetDeviceProcAddr(device, "vkCmdClearDepthStencilImage");
776 	vkCmdClearAttachments = cast(typeof(vkCmdClearAttachments)) vkGetDeviceProcAddr(device, "vkCmdClearAttachments");
777 	vkCmdResolveImage = cast(typeof(vkCmdResolveImage)) vkGetDeviceProcAddr(device, "vkCmdResolveImage");
778 	vkCmdSetEvent = cast(typeof(vkCmdSetEvent)) vkGetDeviceProcAddr(device, "vkCmdSetEvent");
779 	vkCmdResetEvent = cast(typeof(vkCmdResetEvent)) vkGetDeviceProcAddr(device, "vkCmdResetEvent");
780 	vkCmdWaitEvents = cast(typeof(vkCmdWaitEvents)) vkGetDeviceProcAddr(device, "vkCmdWaitEvents");
781 	vkCmdPipelineBarrier = cast(typeof(vkCmdPipelineBarrier)) vkGetDeviceProcAddr(device, "vkCmdPipelineBarrier");
782 	vkCmdBeginQuery = cast(typeof(vkCmdBeginQuery)) vkGetDeviceProcAddr(device, "vkCmdBeginQuery");
783 	vkCmdEndQuery = cast(typeof(vkCmdEndQuery)) vkGetDeviceProcAddr(device, "vkCmdEndQuery");
784 	vkCmdResetQueryPool = cast(typeof(vkCmdResetQueryPool)) vkGetDeviceProcAddr(device, "vkCmdResetQueryPool");
785 	vkCmdWriteTimestamp = cast(typeof(vkCmdWriteTimestamp)) vkGetDeviceProcAddr(device, "vkCmdWriteTimestamp");
786 	vkCmdCopyQueryPoolResults = cast(typeof(vkCmdCopyQueryPoolResults)) vkGetDeviceProcAddr(device, "vkCmdCopyQueryPoolResults");
787 	vkCmdPushConstants = cast(typeof(vkCmdPushConstants)) vkGetDeviceProcAddr(device, "vkCmdPushConstants");
788 	vkCmdBeginRenderPass = cast(typeof(vkCmdBeginRenderPass)) vkGetDeviceProcAddr(device, "vkCmdBeginRenderPass");
789 	vkCmdNextSubpass = cast(typeof(vkCmdNextSubpass)) vkGetDeviceProcAddr(device, "vkCmdNextSubpass");
790 	vkCmdEndRenderPass = cast(typeof(vkCmdEndRenderPass)) vkGetDeviceProcAddr(device, "vkCmdEndRenderPass");
791 	vkCmdExecuteCommands = cast(typeof(vkCmdExecuteCommands)) vkGetDeviceProcAddr(device, "vkCmdExecuteCommands");
792 
793 	// VK_KHR_swapchain
794 	vkCreateSwapchainKHR = cast(typeof(vkCreateSwapchainKHR)) vkGetDeviceProcAddr(device, "vkCreateSwapchainKHR");
795 	vkDestroySwapchainKHR = cast(typeof(vkDestroySwapchainKHR)) vkGetDeviceProcAddr(device, "vkDestroySwapchainKHR");
796 	vkGetSwapchainImagesKHR = cast(typeof(vkGetSwapchainImagesKHR)) vkGetDeviceProcAddr(device, "vkGetSwapchainImagesKHR");
797 	vkAcquireNextImageKHR = cast(typeof(vkAcquireNextImageKHR)) vkGetDeviceProcAddr(device, "vkAcquireNextImageKHR");
798 	vkQueuePresentKHR = cast(typeof(vkQueuePresentKHR)) vkGetDeviceProcAddr(device, "vkQueuePresentKHR");
799 
800 	// VK_KHR_display_swapchain
801 	vkCreateSharedSwapchainsKHR = cast(typeof(vkCreateSharedSwapchainsKHR)) vkGetDeviceProcAddr(device, "vkCreateSharedSwapchainsKHR");
802 
803 	// VK_EXT_debug_marker
804 	vkDebugMarkerSetObjectTagEXT = cast(typeof(vkDebugMarkerSetObjectTagEXT)) vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectTagEXT");
805 	vkDebugMarkerSetObjectNameEXT = cast(typeof(vkDebugMarkerSetObjectNameEXT)) vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT");
806 	vkCmdDebugMarkerBeginEXT = cast(typeof(vkCmdDebugMarkerBeginEXT)) vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT");
807 	vkCmdDebugMarkerEndEXT = cast(typeof(vkCmdDebugMarkerEndEXT)) vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT");
808 	vkCmdDebugMarkerInsertEXT = cast(typeof(vkCmdDebugMarkerInsertEXT)) vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT");}
809 
810 /// with a valid VkDevice call this function to retrieve VkDevice, VkQueue and VkCommandBuffer related functions grouped in a DispatchDevice struct
811 /// the functions call directly VkDevice and related resources and can be retrieved for any VkDevice
812 DispatchDevice createDispatchDeviceLevelFunctions(VkDevice device) {
813 	assert(vkGetDeviceProcAddr !is null, "Must call loadInstanceLevelFunctions before loadDeviceLevelFunctions");
814 	
815 	DispatchDevice dispatchDevice;
816 	with(dispatchDevice) {
817 
818 	// VK_VERSION_1_0
819 	vkDestroyDevice = cast(typeof(vkDestroyDevice)) vkGetDeviceProcAddr(device, "vkDestroyDevice");
820 	vkGetDeviceQueue = cast(typeof(vkGetDeviceQueue)) vkGetDeviceProcAddr(device, "vkGetDeviceQueue");
821 	vkQueueSubmit = cast(typeof(vkQueueSubmit)) vkGetDeviceProcAddr(device, "vkQueueSubmit");
822 	vkQueueWaitIdle = cast(typeof(vkQueueWaitIdle)) vkGetDeviceProcAddr(device, "vkQueueWaitIdle");
823 	vkDeviceWaitIdle = cast(typeof(vkDeviceWaitIdle)) vkGetDeviceProcAddr(device, "vkDeviceWaitIdle");
824 	vkAllocateMemory = cast(typeof(vkAllocateMemory)) vkGetDeviceProcAddr(device, "vkAllocateMemory");
825 	vkFreeMemory = cast(typeof(vkFreeMemory)) vkGetDeviceProcAddr(device, "vkFreeMemory");
826 	vkMapMemory = cast(typeof(vkMapMemory)) vkGetDeviceProcAddr(device, "vkMapMemory");
827 	vkUnmapMemory = cast(typeof(vkUnmapMemory)) vkGetDeviceProcAddr(device, "vkUnmapMemory");
828 	vkFlushMappedMemoryRanges = cast(typeof(vkFlushMappedMemoryRanges)) vkGetDeviceProcAddr(device, "vkFlushMappedMemoryRanges");
829 	vkInvalidateMappedMemoryRanges = cast(typeof(vkInvalidateMappedMemoryRanges)) vkGetDeviceProcAddr(device, "vkInvalidateMappedMemoryRanges");
830 	vkGetDeviceMemoryCommitment = cast(typeof(vkGetDeviceMemoryCommitment)) vkGetDeviceProcAddr(device, "vkGetDeviceMemoryCommitment");
831 	vkBindBufferMemory = cast(typeof(vkBindBufferMemory)) vkGetDeviceProcAddr(device, "vkBindBufferMemory");
832 	vkBindImageMemory = cast(typeof(vkBindImageMemory)) vkGetDeviceProcAddr(device, "vkBindImageMemory");
833 	vkGetBufferMemoryRequirements = cast(typeof(vkGetBufferMemoryRequirements)) vkGetDeviceProcAddr(device, "vkGetBufferMemoryRequirements");
834 	vkGetImageMemoryRequirements = cast(typeof(vkGetImageMemoryRequirements)) vkGetDeviceProcAddr(device, "vkGetImageMemoryRequirements");
835 	vkGetImageSparseMemoryRequirements = cast(typeof(vkGetImageSparseMemoryRequirements)) vkGetDeviceProcAddr(device, "vkGetImageSparseMemoryRequirements");
836 	vkQueueBindSparse = cast(typeof(vkQueueBindSparse)) vkGetDeviceProcAddr(device, "vkQueueBindSparse");
837 	vkCreateFence = cast(typeof(vkCreateFence)) vkGetDeviceProcAddr(device, "vkCreateFence");
838 	vkDestroyFence = cast(typeof(vkDestroyFence)) vkGetDeviceProcAddr(device, "vkDestroyFence");
839 	vkResetFences = cast(typeof(vkResetFences)) vkGetDeviceProcAddr(device, "vkResetFences");
840 	vkGetFenceStatus = cast(typeof(vkGetFenceStatus)) vkGetDeviceProcAddr(device, "vkGetFenceStatus");
841 	vkWaitForFences = cast(typeof(vkWaitForFences)) vkGetDeviceProcAddr(device, "vkWaitForFences");
842 	vkCreateSemaphore = cast(typeof(vkCreateSemaphore)) vkGetDeviceProcAddr(device, "vkCreateSemaphore");
843 	vkDestroySemaphore = cast(typeof(vkDestroySemaphore)) vkGetDeviceProcAddr(device, "vkDestroySemaphore");
844 	vkCreateEvent = cast(typeof(vkCreateEvent)) vkGetDeviceProcAddr(device, "vkCreateEvent");
845 	vkDestroyEvent = cast(typeof(vkDestroyEvent)) vkGetDeviceProcAddr(device, "vkDestroyEvent");
846 	vkGetEventStatus = cast(typeof(vkGetEventStatus)) vkGetDeviceProcAddr(device, "vkGetEventStatus");
847 	vkSetEvent = cast(typeof(vkSetEvent)) vkGetDeviceProcAddr(device, "vkSetEvent");
848 	vkResetEvent = cast(typeof(vkResetEvent)) vkGetDeviceProcAddr(device, "vkResetEvent");
849 	vkCreateQueryPool = cast(typeof(vkCreateQueryPool)) vkGetDeviceProcAddr(device, "vkCreateQueryPool");
850 	vkDestroyQueryPool = cast(typeof(vkDestroyQueryPool)) vkGetDeviceProcAddr(device, "vkDestroyQueryPool");
851 	vkGetQueryPoolResults = cast(typeof(vkGetQueryPoolResults)) vkGetDeviceProcAddr(device, "vkGetQueryPoolResults");
852 	vkCreateBuffer = cast(typeof(vkCreateBuffer)) vkGetDeviceProcAddr(device, "vkCreateBuffer");
853 	vkDestroyBuffer = cast(typeof(vkDestroyBuffer)) vkGetDeviceProcAddr(device, "vkDestroyBuffer");
854 	vkCreateBufferView = cast(typeof(vkCreateBufferView)) vkGetDeviceProcAddr(device, "vkCreateBufferView");
855 	vkDestroyBufferView = cast(typeof(vkDestroyBufferView)) vkGetDeviceProcAddr(device, "vkDestroyBufferView");
856 	vkCreateImage = cast(typeof(vkCreateImage)) vkGetDeviceProcAddr(device, "vkCreateImage");
857 	vkDestroyImage = cast(typeof(vkDestroyImage)) vkGetDeviceProcAddr(device, "vkDestroyImage");
858 	vkGetImageSubresourceLayout = cast(typeof(vkGetImageSubresourceLayout)) vkGetDeviceProcAddr(device, "vkGetImageSubresourceLayout");
859 	vkCreateImageView = cast(typeof(vkCreateImageView)) vkGetDeviceProcAddr(device, "vkCreateImageView");
860 	vkDestroyImageView = cast(typeof(vkDestroyImageView)) vkGetDeviceProcAddr(device, "vkDestroyImageView");
861 	vkCreateShaderModule = cast(typeof(vkCreateShaderModule)) vkGetDeviceProcAddr(device, "vkCreateShaderModule");
862 	vkDestroyShaderModule = cast(typeof(vkDestroyShaderModule)) vkGetDeviceProcAddr(device, "vkDestroyShaderModule");
863 	vkCreatePipelineCache = cast(typeof(vkCreatePipelineCache)) vkGetDeviceProcAddr(device, "vkCreatePipelineCache");
864 	vkDestroyPipelineCache = cast(typeof(vkDestroyPipelineCache)) vkGetDeviceProcAddr(device, "vkDestroyPipelineCache");
865 	vkGetPipelineCacheData = cast(typeof(vkGetPipelineCacheData)) vkGetDeviceProcAddr(device, "vkGetPipelineCacheData");
866 	vkMergePipelineCaches = cast(typeof(vkMergePipelineCaches)) vkGetDeviceProcAddr(device, "vkMergePipelineCaches");
867 	vkCreateGraphicsPipelines = cast(typeof(vkCreateGraphicsPipelines)) vkGetDeviceProcAddr(device, "vkCreateGraphicsPipelines");
868 	vkCreateComputePipelines = cast(typeof(vkCreateComputePipelines)) vkGetDeviceProcAddr(device, "vkCreateComputePipelines");
869 	vkDestroyPipeline = cast(typeof(vkDestroyPipeline)) vkGetDeviceProcAddr(device, "vkDestroyPipeline");
870 	vkCreatePipelineLayout = cast(typeof(vkCreatePipelineLayout)) vkGetDeviceProcAddr(device, "vkCreatePipelineLayout");
871 	vkDestroyPipelineLayout = cast(typeof(vkDestroyPipelineLayout)) vkGetDeviceProcAddr(device, "vkDestroyPipelineLayout");
872 	vkCreateSampler = cast(typeof(vkCreateSampler)) vkGetDeviceProcAddr(device, "vkCreateSampler");
873 	vkDestroySampler = cast(typeof(vkDestroySampler)) vkGetDeviceProcAddr(device, "vkDestroySampler");
874 	vkCreateDescriptorSetLayout = cast(typeof(vkCreateDescriptorSetLayout)) vkGetDeviceProcAddr(device, "vkCreateDescriptorSetLayout");
875 	vkDestroyDescriptorSetLayout = cast(typeof(vkDestroyDescriptorSetLayout)) vkGetDeviceProcAddr(device, "vkDestroyDescriptorSetLayout");
876 	vkCreateDescriptorPool = cast(typeof(vkCreateDescriptorPool)) vkGetDeviceProcAddr(device, "vkCreateDescriptorPool");
877 	vkDestroyDescriptorPool = cast(typeof(vkDestroyDescriptorPool)) vkGetDeviceProcAddr(device, "vkDestroyDescriptorPool");
878 	vkResetDescriptorPool = cast(typeof(vkResetDescriptorPool)) vkGetDeviceProcAddr(device, "vkResetDescriptorPool");
879 	vkAllocateDescriptorSets = cast(typeof(vkAllocateDescriptorSets)) vkGetDeviceProcAddr(device, "vkAllocateDescriptorSets");
880 	vkFreeDescriptorSets = cast(typeof(vkFreeDescriptorSets)) vkGetDeviceProcAddr(device, "vkFreeDescriptorSets");
881 	vkUpdateDescriptorSets = cast(typeof(vkUpdateDescriptorSets)) vkGetDeviceProcAddr(device, "vkUpdateDescriptorSets");
882 	vkCreateFramebuffer = cast(typeof(vkCreateFramebuffer)) vkGetDeviceProcAddr(device, "vkCreateFramebuffer");
883 	vkDestroyFramebuffer = cast(typeof(vkDestroyFramebuffer)) vkGetDeviceProcAddr(device, "vkDestroyFramebuffer");
884 	vkCreateRenderPass = cast(typeof(vkCreateRenderPass)) vkGetDeviceProcAddr(device, "vkCreateRenderPass");
885 	vkDestroyRenderPass = cast(typeof(vkDestroyRenderPass)) vkGetDeviceProcAddr(device, "vkDestroyRenderPass");
886 	vkGetRenderAreaGranularity = cast(typeof(vkGetRenderAreaGranularity)) vkGetDeviceProcAddr(device, "vkGetRenderAreaGranularity");
887 	vkCreateCommandPool = cast(typeof(vkCreateCommandPool)) vkGetDeviceProcAddr(device, "vkCreateCommandPool");
888 	vkDestroyCommandPool = cast(typeof(vkDestroyCommandPool)) vkGetDeviceProcAddr(device, "vkDestroyCommandPool");
889 	vkResetCommandPool = cast(typeof(vkResetCommandPool)) vkGetDeviceProcAddr(device, "vkResetCommandPool");
890 	vkAllocateCommandBuffers = cast(typeof(vkAllocateCommandBuffers)) vkGetDeviceProcAddr(device, "vkAllocateCommandBuffers");
891 	vkFreeCommandBuffers = cast(typeof(vkFreeCommandBuffers)) vkGetDeviceProcAddr(device, "vkFreeCommandBuffers");
892 	vkBeginCommandBuffer = cast(typeof(vkBeginCommandBuffer)) vkGetDeviceProcAddr(device, "vkBeginCommandBuffer");
893 	vkEndCommandBuffer = cast(typeof(vkEndCommandBuffer)) vkGetDeviceProcAddr(device, "vkEndCommandBuffer");
894 	vkResetCommandBuffer = cast(typeof(vkResetCommandBuffer)) vkGetDeviceProcAddr(device, "vkResetCommandBuffer");
895 	vkCmdBindPipeline = cast(typeof(vkCmdBindPipeline)) vkGetDeviceProcAddr(device, "vkCmdBindPipeline");
896 	vkCmdSetViewport = cast(typeof(vkCmdSetViewport)) vkGetDeviceProcAddr(device, "vkCmdSetViewport");
897 	vkCmdSetScissor = cast(typeof(vkCmdSetScissor)) vkGetDeviceProcAddr(device, "vkCmdSetScissor");
898 	vkCmdSetLineWidth = cast(typeof(vkCmdSetLineWidth)) vkGetDeviceProcAddr(device, "vkCmdSetLineWidth");
899 	vkCmdSetDepthBias = cast(typeof(vkCmdSetDepthBias)) vkGetDeviceProcAddr(device, "vkCmdSetDepthBias");
900 	vkCmdSetBlendConstants = cast(typeof(vkCmdSetBlendConstants)) vkGetDeviceProcAddr(device, "vkCmdSetBlendConstants");
901 	vkCmdSetDepthBounds = cast(typeof(vkCmdSetDepthBounds)) vkGetDeviceProcAddr(device, "vkCmdSetDepthBounds");
902 	vkCmdSetStencilCompareMask = cast(typeof(vkCmdSetStencilCompareMask)) vkGetDeviceProcAddr(device, "vkCmdSetStencilCompareMask");
903 	vkCmdSetStencilWriteMask = cast(typeof(vkCmdSetStencilWriteMask)) vkGetDeviceProcAddr(device, "vkCmdSetStencilWriteMask");
904 	vkCmdSetStencilReference = cast(typeof(vkCmdSetStencilReference)) vkGetDeviceProcAddr(device, "vkCmdSetStencilReference");
905 	vkCmdBindDescriptorSets = cast(typeof(vkCmdBindDescriptorSets)) vkGetDeviceProcAddr(device, "vkCmdBindDescriptorSets");
906 	vkCmdBindIndexBuffer = cast(typeof(vkCmdBindIndexBuffer)) vkGetDeviceProcAddr(device, "vkCmdBindIndexBuffer");
907 	vkCmdBindVertexBuffers = cast(typeof(vkCmdBindVertexBuffers)) vkGetDeviceProcAddr(device, "vkCmdBindVertexBuffers");
908 	vkCmdDraw = cast(typeof(vkCmdDraw)) vkGetDeviceProcAddr(device, "vkCmdDraw");
909 	vkCmdDrawIndexed = cast(typeof(vkCmdDrawIndexed)) vkGetDeviceProcAddr(device, "vkCmdDrawIndexed");
910 	vkCmdDrawIndirect = cast(typeof(vkCmdDrawIndirect)) vkGetDeviceProcAddr(device, "vkCmdDrawIndirect");
911 	vkCmdDrawIndexedIndirect = cast(typeof(vkCmdDrawIndexedIndirect)) vkGetDeviceProcAddr(device, "vkCmdDrawIndexedIndirect");
912 	vkCmdDispatch = cast(typeof(vkCmdDispatch)) vkGetDeviceProcAddr(device, "vkCmdDispatch");
913 	vkCmdDispatchIndirect = cast(typeof(vkCmdDispatchIndirect)) vkGetDeviceProcAddr(device, "vkCmdDispatchIndirect");
914 	vkCmdCopyBuffer = cast(typeof(vkCmdCopyBuffer)) vkGetDeviceProcAddr(device, "vkCmdCopyBuffer");
915 	vkCmdCopyImage = cast(typeof(vkCmdCopyImage)) vkGetDeviceProcAddr(device, "vkCmdCopyImage");
916 	vkCmdBlitImage = cast(typeof(vkCmdBlitImage)) vkGetDeviceProcAddr(device, "vkCmdBlitImage");
917 	vkCmdCopyBufferToImage = cast(typeof(vkCmdCopyBufferToImage)) vkGetDeviceProcAddr(device, "vkCmdCopyBufferToImage");
918 	vkCmdCopyImageToBuffer = cast(typeof(vkCmdCopyImageToBuffer)) vkGetDeviceProcAddr(device, "vkCmdCopyImageToBuffer");
919 	vkCmdUpdateBuffer = cast(typeof(vkCmdUpdateBuffer)) vkGetDeviceProcAddr(device, "vkCmdUpdateBuffer");
920 	vkCmdFillBuffer = cast(typeof(vkCmdFillBuffer)) vkGetDeviceProcAddr(device, "vkCmdFillBuffer");
921 	vkCmdClearColorImage = cast(typeof(vkCmdClearColorImage)) vkGetDeviceProcAddr(device, "vkCmdClearColorImage");
922 	vkCmdClearDepthStencilImage = cast(typeof(vkCmdClearDepthStencilImage)) vkGetDeviceProcAddr(device, "vkCmdClearDepthStencilImage");
923 	vkCmdClearAttachments = cast(typeof(vkCmdClearAttachments)) vkGetDeviceProcAddr(device, "vkCmdClearAttachments");
924 	vkCmdResolveImage = cast(typeof(vkCmdResolveImage)) vkGetDeviceProcAddr(device, "vkCmdResolveImage");
925 	vkCmdSetEvent = cast(typeof(vkCmdSetEvent)) vkGetDeviceProcAddr(device, "vkCmdSetEvent");
926 	vkCmdResetEvent = cast(typeof(vkCmdResetEvent)) vkGetDeviceProcAddr(device, "vkCmdResetEvent");
927 	vkCmdWaitEvents = cast(typeof(vkCmdWaitEvents)) vkGetDeviceProcAddr(device, "vkCmdWaitEvents");
928 	vkCmdPipelineBarrier = cast(typeof(vkCmdPipelineBarrier)) vkGetDeviceProcAddr(device, "vkCmdPipelineBarrier");
929 	vkCmdBeginQuery = cast(typeof(vkCmdBeginQuery)) vkGetDeviceProcAddr(device, "vkCmdBeginQuery");
930 	vkCmdEndQuery = cast(typeof(vkCmdEndQuery)) vkGetDeviceProcAddr(device, "vkCmdEndQuery");
931 	vkCmdResetQueryPool = cast(typeof(vkCmdResetQueryPool)) vkGetDeviceProcAddr(device, "vkCmdResetQueryPool");
932 	vkCmdWriteTimestamp = cast(typeof(vkCmdWriteTimestamp)) vkGetDeviceProcAddr(device, "vkCmdWriteTimestamp");
933 	vkCmdCopyQueryPoolResults = cast(typeof(vkCmdCopyQueryPoolResults)) vkGetDeviceProcAddr(device, "vkCmdCopyQueryPoolResults");
934 	vkCmdPushConstants = cast(typeof(vkCmdPushConstants)) vkGetDeviceProcAddr(device, "vkCmdPushConstants");
935 	vkCmdBeginRenderPass = cast(typeof(vkCmdBeginRenderPass)) vkGetDeviceProcAddr(device, "vkCmdBeginRenderPass");
936 	vkCmdNextSubpass = cast(typeof(vkCmdNextSubpass)) vkGetDeviceProcAddr(device, "vkCmdNextSubpass");
937 	vkCmdEndRenderPass = cast(typeof(vkCmdEndRenderPass)) vkGetDeviceProcAddr(device, "vkCmdEndRenderPass");
938 	vkCmdExecuteCommands = cast(typeof(vkCmdExecuteCommands)) vkGetDeviceProcAddr(device, "vkCmdExecuteCommands");
939 
940 	// VK_KHR_swapchain
941 	vkCreateSwapchainKHR = cast(typeof(vkCreateSwapchainKHR)) vkGetDeviceProcAddr(device, "vkCreateSwapchainKHR");
942 	vkDestroySwapchainKHR = cast(typeof(vkDestroySwapchainKHR)) vkGetDeviceProcAddr(device, "vkDestroySwapchainKHR");
943 	vkGetSwapchainImagesKHR = cast(typeof(vkGetSwapchainImagesKHR)) vkGetDeviceProcAddr(device, "vkGetSwapchainImagesKHR");
944 	vkAcquireNextImageKHR = cast(typeof(vkAcquireNextImageKHR)) vkGetDeviceProcAddr(device, "vkAcquireNextImageKHR");
945 	vkQueuePresentKHR = cast(typeof(vkQueuePresentKHR)) vkGetDeviceProcAddr(device, "vkQueuePresentKHR");
946 
947 	// VK_KHR_display_swapchain
948 	vkCreateSharedSwapchainsKHR = cast(typeof(vkCreateSharedSwapchainsKHR)) vkGetDeviceProcAddr(device, "vkCreateSharedSwapchainsKHR");
949 
950 	// VK_EXT_debug_marker
951 	vkDebugMarkerSetObjectTagEXT = cast(typeof(vkDebugMarkerSetObjectTagEXT)) vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectTagEXT");
952 	vkDebugMarkerSetObjectNameEXT = cast(typeof(vkDebugMarkerSetObjectNameEXT)) vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT");
953 	vkCmdDebugMarkerBeginEXT = cast(typeof(vkCmdDebugMarkerBeginEXT)) vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT");
954 	vkCmdDebugMarkerEndEXT = cast(typeof(vkCmdDebugMarkerEndEXT)) vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT");
955 	vkCmdDebugMarkerInsertEXT = cast(typeof(vkCmdDebugMarkerInsertEXT)) vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT");	}
956 
957 	return dispatchDevice;
958 }
959 
960 
961 // struct to group per device deviceLevelFunctions into a custom namespace
962 private struct DispatchDevice {
963 	PFN_vkDestroyDevice vkDestroyDevice;
964 	PFN_vkGetDeviceQueue vkGetDeviceQueue;
965 	PFN_vkQueueSubmit vkQueueSubmit;
966 	PFN_vkQueueWaitIdle vkQueueWaitIdle;
967 	PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
968 	PFN_vkAllocateMemory vkAllocateMemory;
969 	PFN_vkFreeMemory vkFreeMemory;
970 	PFN_vkMapMemory vkMapMemory;
971 	PFN_vkUnmapMemory vkUnmapMemory;
972 	PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
973 	PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
974 	PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment;
975 	PFN_vkBindBufferMemory vkBindBufferMemory;
976 	PFN_vkBindImageMemory vkBindImageMemory;
977 	PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
978 	PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
979 	PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
980 	PFN_vkQueueBindSparse vkQueueBindSparse;
981 	PFN_vkCreateFence vkCreateFence;
982 	PFN_vkDestroyFence vkDestroyFence;
983 	PFN_vkResetFences vkResetFences;
984 	PFN_vkGetFenceStatus vkGetFenceStatus;
985 	PFN_vkWaitForFences vkWaitForFences;
986 	PFN_vkCreateSemaphore vkCreateSemaphore;
987 	PFN_vkDestroySemaphore vkDestroySemaphore;
988 	PFN_vkCreateEvent vkCreateEvent;
989 	PFN_vkDestroyEvent vkDestroyEvent;
990 	PFN_vkGetEventStatus vkGetEventStatus;
991 	PFN_vkSetEvent vkSetEvent;
992 	PFN_vkResetEvent vkResetEvent;
993 	PFN_vkCreateQueryPool vkCreateQueryPool;
994 	PFN_vkDestroyQueryPool vkDestroyQueryPool;
995 	PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
996 	PFN_vkCreateBuffer vkCreateBuffer;
997 	PFN_vkDestroyBuffer vkDestroyBuffer;
998 	PFN_vkCreateBufferView vkCreateBufferView;
999 	PFN_vkDestroyBufferView vkDestroyBufferView;
1000 	PFN_vkCreateImage vkCreateImage;
1001 	PFN_vkDestroyImage vkDestroyImage;
1002 	PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
1003 	PFN_vkCreateImageView vkCreateImageView;
1004 	PFN_vkDestroyImageView vkDestroyImageView;
1005 	PFN_vkCreateShaderModule vkCreateShaderModule;
1006 	PFN_vkDestroyShaderModule vkDestroyShaderModule;
1007 	PFN_vkCreatePipelineCache vkCreatePipelineCache;
1008 	PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
1009 	PFN_vkGetPipelineCacheData vkGetPipelineCacheData;
1010 	PFN_vkMergePipelineCaches vkMergePipelineCaches;
1011 	PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
1012 	PFN_vkCreateComputePipelines vkCreateComputePipelines;
1013 	PFN_vkDestroyPipeline vkDestroyPipeline;
1014 	PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
1015 	PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
1016 	PFN_vkCreateSampler vkCreateSampler;
1017 	PFN_vkDestroySampler vkDestroySampler;
1018 	PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
1019 	PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
1020 	PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
1021 	PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
1022 	PFN_vkResetDescriptorPool vkResetDescriptorPool;
1023 	PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
1024 	PFN_vkFreeDescriptorSets vkFreeDescriptorSets;
1025 	PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
1026 	PFN_vkCreateFramebuffer vkCreateFramebuffer;
1027 	PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
1028 	PFN_vkCreateRenderPass vkCreateRenderPass;
1029 	PFN_vkDestroyRenderPass vkDestroyRenderPass;
1030 	PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity;
1031 	PFN_vkCreateCommandPool vkCreateCommandPool;
1032 	PFN_vkDestroyCommandPool vkDestroyCommandPool;
1033 	PFN_vkResetCommandPool vkResetCommandPool;
1034 	PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
1035 	PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
1036 	PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
1037 	PFN_vkEndCommandBuffer vkEndCommandBuffer;
1038 	PFN_vkResetCommandBuffer vkResetCommandBuffer;
1039 	PFN_vkCmdBindPipeline vkCmdBindPipeline;
1040 	PFN_vkCmdSetViewport vkCmdSetViewport;
1041 	PFN_vkCmdSetScissor vkCmdSetScissor;
1042 	PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
1043 	PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
1044 	PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants;
1045 	PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds;
1046 	PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
1047 	PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
1048 	PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
1049 	PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
1050 	PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
1051 	PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
1052 	PFN_vkCmdDraw vkCmdDraw;
1053 	PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
1054 	PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
1055 	PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
1056 	PFN_vkCmdDispatch vkCmdDispatch;
1057 	PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect;
1058 	PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
1059 	PFN_vkCmdCopyImage vkCmdCopyImage;
1060 	PFN_vkCmdBlitImage vkCmdBlitImage;
1061 	PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
1062 	PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer;
1063 	PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer;
1064 	PFN_vkCmdFillBuffer vkCmdFillBuffer;
1065 	PFN_vkCmdClearColorImage vkCmdClearColorImage;
1066 	PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage;
1067 	PFN_vkCmdClearAttachments vkCmdClearAttachments;
1068 	PFN_vkCmdResolveImage vkCmdResolveImage;
1069 	PFN_vkCmdSetEvent vkCmdSetEvent;
1070 	PFN_vkCmdResetEvent vkCmdResetEvent;
1071 	PFN_vkCmdWaitEvents vkCmdWaitEvents;
1072 	PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
1073 	PFN_vkCmdBeginQuery vkCmdBeginQuery;
1074 	PFN_vkCmdEndQuery vkCmdEndQuery;
1075 	PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
1076 	PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp;
1077 	PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
1078 	PFN_vkCmdPushConstants vkCmdPushConstants;
1079 	PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
1080 	PFN_vkCmdNextSubpass vkCmdNextSubpass;
1081 	PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
1082 	PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
1083 	PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;
1084 	PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
1085 	PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
1086 	PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
1087 	PFN_vkQueuePresentKHR vkQueuePresentKHR;
1088 	PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
1089 	PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT;
1090 	PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT;
1091 	PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT;
1092 	PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT;
1093 	PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT;
1094 }
1095 
1096 // Derelict loader to acquire entry point vkGetInstanceProcAddr
1097 version(ERUPTED_FROM_DERELICT) {
1098 	import derelict.util.loader;
1099 	import derelict.util.system;
1100 	
1101 	private {
1102 		version(Windows)
1103 			enum libNames = "vulkan-1.dll";
1104 
1105 		else version(Posix)
1106 			enum libNames = "libvulkan.so.1";
1107 
1108 		else
1109 			static assert(0,"Need to implement Vulkan libNames for this operating system.");
1110 	}
1111 	
1112 	class DerelictEruptedLoader : SharedLibLoader {
1113 		this() {
1114 			super(libNames);
1115 		}
1116 		
1117 		protected override void loadSymbols() {
1118 			typeof(vkGetInstanceProcAddr) getProcAddr;
1119 			bindFunc(cast(void**)&getProcAddr, "vkGetInstanceProcAddr");
1120 			loadGlobalLevelFunctions(getProcAddr);
1121 		}
1122 	}
1123 	
1124 	__gshared DerelictEruptedLoader DerelictErupted;
1125 
1126 	shared static this() {
1127 		DerelictErupted = new DerelictEruptedLoader();
1128 	}
1129 }
1130 
1131