1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */
28 module derelict.vulkan.vulkan;
29 
30 public {
31 	import derelict.vulkan.vk;
32 	import derelict.vulkan.functions;
33 }
34 
35 private {
36 	import derelict.util.loader;
37 	import derelict.util.system;
38 
39 	static if (Derelict_OS_Windows)
40 		enum libNames = "vulkan.dll";
41 	//~ else static if(Derelict_OS_Mac)
42 	//~ enum libNames = "libglfw.3.dylib";
43 	//~ else static if(Derelict_OS_Posix)
44 	//~ enum libNames = "libglfw3.so,libglfw.so.3,/usr/local/lib/libglfw3.so,/usr/local/lib/libglfw.so.3";
45 	else
46 		static assert(0, "Need to implement vulkan libNames for this operating system.");
47 }
48 
49 class DerelictVulkanLoader : SharedLibLoader {
50 	protected {
51 		override void loadSymbols() {
52 			bindFunc(cast(void**)&vkAllocationFunction, "vkAllocationFunction");
53 			bindFunc(cast(void**)&vkReallocationFunction, "vkReallocationFunction");
54 			bindFunc(cast(void**)&vkFreeFunction, "vkFreeFunction");
55 			bindFunc(cast(void**)&vkInternalAllocationNotification, "vkInternalAllocationNotification");
56 			bindFunc(cast(void**)&vkInternalFreeNotification, "vkInternalFreeNotification");
57 			bindFunc(cast(void**)&vkVoidFunction, "vkVoidFunction");
58 			bindFunc(cast(void**)&vkCreateInstance, "vkCreateInstance");
59 			bindFunc(cast(void**)&vkDestroyInstance, "vkDestroyInstance");
60 			bindFunc(cast(void**)&vkEnumeratePhysicalDevices, "vkEnumeratePhysicalDevices");
61 			bindFunc(cast(void**)&vkGetPhysicalDeviceFeatures, "vkGetPhysicalDeviceFeatures");
62 			bindFunc(cast(void**)&vkGetPhysicalDeviceFormatProperties, "vkGetPhysicalDeviceFormatProperties");
63 			bindFunc(cast(void**)&vkGetPhysicalDeviceImageFormatProperties, "vkGetPhysicalDeviceImageFormatProperties");
64 			bindFunc(cast(void**)&vkGetPhysicalDeviceProperties, "vkGetPhysicalDeviceProperties");
65 			bindFunc(cast(void**)&vkGetPhysicalDeviceQueueFamilyProperties, "vkGetPhysicalDeviceQueueFamilyProperties");
66 			bindFunc(cast(void**)&vkGetPhysicalDeviceMemoryProperties, "vkGetPhysicalDeviceMemoryProperties");
67 			bindFunc(cast(void**)&vkGetInstanceProcAddr, "vkGetInstanceProcAddr");
68 			bindFunc(cast(void**)&vkGetDeviceProcAddr, "vkGetDeviceProcAddr");
69 			bindFunc(cast(void**)&vkCreateDevice, "vkCreateDevice");
70 			bindFunc(cast(void**)&vkDestroyDevice, "vkDestroyDevice");
71 			bindFunc(cast(void**)&vkEnumerateInstanceExtensionProperties, "vkEnumerateInstanceExtensionProperties");
72 			bindFunc(cast(void**)&vkEnumerateDeviceExtensionProperties, "vkEnumerateDeviceExtensionProperties");
73 			bindFunc(cast(void**)&vkEnumerateInstanceLayerProperties, "vkEnumerateInstanceLayerProperties");
74 			bindFunc(cast(void**)&vkEnumerateDeviceLayerProperties, "vkEnumerateDeviceLayerProperties");
75 			bindFunc(cast(void**)&vkGetDeviceQueue, "vkGetDeviceQueue");
76 			bindFunc(cast(void**)&vkQueueSubmit, "vkQueueSubmit");
77 			bindFunc(cast(void**)&vkQueueWaitIdle, "vkQueueWaitIdle");
78 			bindFunc(cast(void**)&vkDeviceWaitIdle, "vkDeviceWaitIdle");
79 			bindFunc(cast(void**)&vkAllocateMemory, "vkAllocateMemory");
80 			bindFunc(cast(void**)&vkFreeMemory, "vkFreeMemory");
81 			bindFunc(cast(void**)&vkMapMemory, "vkMapMemory");
82 			bindFunc(cast(void**)&vkUnmapMemory, "vkUnmapMemory");
83 			bindFunc(cast(void**)&vkFlushMappedMemoryRanges, "vkFlushMappedMemoryRanges");
84 			bindFunc(cast(void**)&vkInvalidateMappedMemoryRanges, "vkInvalidateMappedMemoryRanges");
85 			bindFunc(cast(void**)&vkGetDeviceMemoryCommitment, "vkGetDeviceMemoryCommitment");
86 			bindFunc(cast(void**)&vkBindBufferMemory, "vkBindBufferMemory");
87 			bindFunc(cast(void**)&vkBindImageMemory, "vkBindImageMemory");
88 			bindFunc(cast(void**)&vkGetBufferMemoryRequirements, "vkGetBufferMemoryRequirements");
89 			bindFunc(cast(void**)&vkGetImageMemoryRequirements, "vkGetImageMemoryRequirements");
90 			bindFunc(cast(void**)&vkGetImageSparseMemoryRequirements, "vkGetImageSparseMemoryRequirements");
91 			bindFunc(cast(void**)&vkGetPhysicalDeviceSparseImageFormatProperties, "vkGetPhysicalDeviceSparseImageFormatProperties");
92 			bindFunc(cast(void**)&vkQueueBindSparse, "vkQueueBindSparse");
93 			bindFunc(cast(void**)&vkCreateFence, "vkCreateFence");
94 			bindFunc(cast(void**)&vkDestroyFence, "vkDestroyFence");
95 			bindFunc(cast(void**)&vkResetFences, "vkResetFences");
96 			bindFunc(cast(void**)&vkGetFenceStatus, "vkGetFenceStatus");
97 			bindFunc(cast(void**)&vkWaitForFences, "vkWaitForFences");
98 			bindFunc(cast(void**)&vkCreateSemaphore, "vkCreateSemaphore");
99 			bindFunc(cast(void**)&vkDestroySemaphore, "vkDestroySemaphore");
100 			bindFunc(cast(void**)&vkCreateEvent, "vkCreateEvent");
101 			bindFunc(cast(void**)&vkDestroyEvent, "vkDestroyEvent");
102 			bindFunc(cast(void**)&vkGetEventStatus, "vkGetEventStatus");
103 			bindFunc(cast(void**)&vkSetEvent, "vkSetEvent");
104 			bindFunc(cast(void**)&vkAllocationFunction, "vkAllocationFunction");
105 			bindFunc(cast(void**)&vkReallocationFunction, "vkReallocationFunction");
106 			bindFunc(cast(void**)&vkFreeFunction, "vkFreeFunction");
107 			bindFunc(cast(void**)&vkInternalAllocationNotification, "vkInternalAllocationNotification");
108 			bindFunc(cast(void**)&vkInternalFreeNotification, "vkInternalFreeNotification");
109 			bindFunc(cast(void**)&vkVoidFunction, "vkVoidFunction");
110 			bindFunc(cast(void**)&vkCreateInstance, "vkCreateInstance");
111 			bindFunc(cast(void**)&vkDestroyInstance, "vkDestroyInstance");
112 			bindFunc(cast(void**)&vkEnumeratePhysicalDevices, "vkEnumeratePhysicalDevices");
113 			bindFunc(cast(void**)&vkGetPhysicalDeviceFeatures, "vkGetPhysicalDeviceFeatures");
114 			bindFunc(cast(void**)&vkGetPhysicalDeviceFormatProperties, "vkGetPhysicalDeviceFormatProperties");
115 			bindFunc(cast(void**)&vkGetPhysicalDeviceImageFormatProperties, "vkGetPhysicalDeviceImageFormatProperties");
116 			bindFunc(cast(void**)&vkGetPhysicalDeviceProperties, "vkGetPhysicalDeviceProperties");
117 			bindFunc(cast(void**)&vkGetPhysicalDeviceQueueFamilyProperties, "vkGetPhysicalDeviceQueueFamilyProperties");
118 			bindFunc(cast(void**)&vkGetPhysicalDeviceMemoryProperties, "vkGetPhysicalDeviceMemoryProperties");
119 			bindFunc(cast(void**)&vkGetInstanceProcAddr, "vkGetInstanceProcAddr");
120 			bindFunc(cast(void**)&vkGetDeviceProcAddr, "vkGetDeviceProcAddr");
121 			bindFunc(cast(void**)&vkCreateDevice, "vkCreateDevice");
122 			bindFunc(cast(void**)&vkDestroyDevice, "vkDestroyDevice");
123 			bindFunc(cast(void**)&vkEnumerateInstanceExtensionProperties, "vkEnumerateInstanceExtensionProperties");
124 			bindFunc(cast(void**)&vkEnumerateDeviceExtensionProperties, "vkEnumerateDeviceExtensionProperties");
125 			bindFunc(cast(void**)&vkEnumerateInstanceLayerProperties, "vkEnumerateInstanceLayerProperties");
126 			bindFunc(cast(void**)&vkEnumerateDeviceLayerProperties, "vkEnumerateDeviceLayerProperties");
127 			bindFunc(cast(void**)&vkGetDeviceQueue, "vkGetDeviceQueue");
128 			bindFunc(cast(void**)&vkQueueSubmit, "vkQueueSubmit");
129 			bindFunc(cast(void**)&vkQueueWaitIdle, "vkQueueWaitIdle");
130 			bindFunc(cast(void**)&vkDeviceWaitIdle, "vkDeviceWaitIdle");
131 			bindFunc(cast(void**)&vkAllocateMemory, "vkAllocateMemory");
132 			bindFunc(cast(void**)&vkFreeMemory, "vkFreeMemory");
133 			bindFunc(cast(void**)&vkMapMemory, "vkMapMemory");
134 			bindFunc(cast(void**)&vkUnmapMemory, "vkUnmapMemory");
135 			bindFunc(cast(void**)&vkFlushMappedMemoryRanges, "vkFlushMappedMemoryRanges");
136 			bindFunc(cast(void**)&vkInvalidateMappedMemoryRanges, "vkInvalidateMappedMemoryRanges");
137 			bindFunc(cast(void**)&vkGetDeviceMemoryCommitment, "vkGetDeviceMemoryCommitment");
138 			bindFunc(cast(void**)&vkBindBufferMemory, "vkBindBufferMemory");
139 			bindFunc(cast(void**)&vkBindImageMemory, "vkBindImageMemory");
140 			bindFunc(cast(void**)&vkGetBufferMemoryRequirements, "vkGetBufferMemoryRequirements");
141 			bindFunc(cast(void**)&vkGetImageMemoryRequirements, "vkGetImageMemoryRequirements");
142 			bindFunc(cast(void**)&vkGetImageSparseMemoryRequirements, "vkGetImageSparseMemoryRequirements");
143 			bindFunc(cast(void**)&vkGetPhysicalDeviceSparseImageFormatProperties, "vkGetPhysicalDeviceSparseImageFormatProperties");
144 			bindFunc(cast(void**)&vkQueueBindSparse, "vkQueueBindSparse");
145 			bindFunc(cast(void**)&vkCreateFence, "vkCreateFence");
146 			bindFunc(cast(void**)&vkDestroyFence, "vkDestroyFence");
147 			bindFunc(cast(void**)&vkResetFences, "vkResetFences");
148 			bindFunc(cast(void**)&vkGetFenceStatus, "vkGetFenceStatus");
149 			bindFunc(cast(void**)&vkWaitForFences, "vkWaitForFences");
150 			bindFunc(cast(void**)&vkCreateSemaphore, "vkCreateSemaphore");
151 			bindFunc(cast(void**)&vkDestroySemaphore, "vkDestroySemaphore");
152 			bindFunc(cast(void**)&vkCreateEvent, "vkCreateEvent");
153 			bindFunc(cast(void**)&vkDestroyEvent, "vkDestroyEvent");
154 			bindFunc(cast(void**)&vkGetEventStatus, "vkGetEventStatus");
155 			bindFunc(cast(void**)&vkSetEvent, "vkSetEvent");
156 			bindFunc(cast(void**)&vkResetEvent, "vkResetEvent");
157 			bindFunc(cast(void**)&vkCreateQueryPool, "vkCreateQueryPool");
158 			bindFunc(cast(void**)&vkDestroyQueryPool, "vkDestroyQueryPool");
159 			bindFunc(cast(void**)&vkGetQueryPoolResults, "vkGetQueryPoolResults");
160 			bindFunc(cast(void**)&vkCreateBuffer, "vkCreateBuffer");
161 			bindFunc(cast(void**)&vkDestroyBuffer, "vkDestroyBuffer");
162 			bindFunc(cast(void**)&vkCreateBufferView, "vkCreateBufferView");
163 			bindFunc(cast(void**)&vkDestroyBufferView, "vkDestroyBufferView");
164 			bindFunc(cast(void**)&vkCreateImage, "vkCreateImage");
165 			bindFunc(cast(void**)&vkDestroyImage, "vkDestroyImage");
166 			bindFunc(cast(void**)&vkGetImageSubresourceLayout, "vkGetImageSubresourceLayout");
167 			bindFunc(cast(void**)&vkCreateImageView, "vkCreateImageView");
168 			bindFunc(cast(void**)&vkDestroyImageView, "vkDestroyImageView");
169 			bindFunc(cast(void**)&vkCreateShaderModule, "vkCreateShaderModule");
170 			bindFunc(cast(void**)&vkDestroyShaderModule, "vkDestroyShaderModule");
171 			bindFunc(cast(void**)&vkCreatePipelineCache, "vkCreatePipelineCache");
172 			bindFunc(cast(void**)&vkDestroyPipelineCache, "vkDestroyPipelineCache");
173 			bindFunc(cast(void**)&vkGetPipelineCacheData, "vkGetPipelineCacheData");
174 			bindFunc(cast(void**)&vkMergePipelineCaches, "vkMergePipelineCaches");
175 			bindFunc(cast(void**)&vkCreateGraphicsPipelines, "vkCreateGraphicsPipelines");
176 			bindFunc(cast(void**)&vkCreateComputePipelines, "vkCreateComputePipelines");
177 			bindFunc(cast(void**)&vkDestroyPipeline, "vkDestroyPipeline");
178 			bindFunc(cast(void**)&vkCreatePipelineLayout, "vkCreatePipelineLayout");
179 			bindFunc(cast(void**)&vkDestroyPipelineLayout, "vkDestroyPipelineLayout");
180 			bindFunc(cast(void**)&vkCreateSampler, "vkCreateSampler");
181 			bindFunc(cast(void**)&vkDestroySampler, "vkDestroySampler");
182 			bindFunc(cast(void**)&vkCreateDescriptorSetLayout, "vkCreateDescriptorSetLayout");
183 			bindFunc(cast(void**)&vkDestroyDescriptorSetLayout, "vkDestroyDescriptorSetLayout");
184 			bindFunc(cast(void**)&vkCreateDescriptorPool, "vkCreateDescriptorPool");
185 			bindFunc(cast(void**)&vkDestroyDescriptorPool, "vkDestroyDescriptorPool");
186 			bindFunc(cast(void**)&vkResetDescriptorPool, "vkResetDescriptorPool");
187 			bindFunc(cast(void**)&vkAllocateDescriptorSets, "vkAllocateDescriptorSets");
188 			bindFunc(cast(void**)&vkFreeDescriptorSets, "vkFreeDescriptorSets");
189 			bindFunc(cast(void**)&vkUpdateDescriptorSets, "vkUpdateDescriptorSets");
190 			bindFunc(cast(void**)&vkCreateFramebuffer, "vkCreateFramebuffer");
191 			bindFunc(cast(void**)&vkDestroyFramebuffer, "vkDestroyFramebuffer");
192 			bindFunc(cast(void**)&vkCreateRenderPass, "vkCreateRenderPass");
193 			bindFunc(cast(void**)&vkDestroyRenderPass, "vkDestroyRenderPass");
194 			bindFunc(cast(void**)&vkGetRenderAreaGranularity, "vkGetRenderAreaGranularity");
195 			bindFunc(cast(void**)&vkCreateCommandPool, "vkCreateCommandPool");
196 			bindFunc(cast(void**)&vkDestroyCommandPool, "vkDestroyCommandPool");
197 			bindFunc(cast(void**)&vkResetCommandPool, "vkResetCommandPool");
198 			bindFunc(cast(void**)&vkAllocateCommandBuffers, "vkAllocateCommandBuffers");
199 			bindFunc(cast(void**)&vkFreeCommandBuffers, "vkFreeCommandBuffers");
200 			bindFunc(cast(void**)&vkBeginCommandBuffer, "vkBeginCommandBuffer");
201 			bindFunc(cast(void**)&vkEndCommandBuffer, "vkEndCommandBuffer");
202 			bindFunc(cast(void**)&vkResetCommandBuffer, "vkResetCommandBuffer");
203 			bindFunc(cast(void**)&vkCmdBindPipeline, "vkCmdBindPipeline");
204 			bindFunc(cast(void**)&vkCmdSetViewport, "vkCmdSetViewport");
205 			bindFunc(cast(void**)&vkCmdSetScissor, "vkCmdSetScissor");
206 			bindFunc(cast(void**)&vkCmdSetLineWidth, "vkCmdSetLineWidth");
207 			bindFunc(cast(void**)&vkCmdSetDepthBias, "vkCmdSetDepthBias");
208 			bindFunc(cast(void**)&vkCmdSetBlendConstants, "vkCmdSetBlendConstants");
209 			bindFunc(cast(void**)&vkCmdSetDepthBounds, "vkCmdSetDepthBounds");
210 			bindFunc(cast(void**)&vkCmdSetStencilCompareMask, "vkCmdSetStencilCompareMask");
211 			bindFunc(cast(void**)&vkCmdSetStencilWriteMask, "vkCmdSetStencilWriteMask");
212 			bindFunc(cast(void**)&vkCmdSetStencilReference, "vkCmdSetStencilReference");
213 			bindFunc(cast(void**)&vkCmdBindDescriptorSets, "vkCmdBindDescriptorSets");
214 			bindFunc(cast(void**)&vkCmdBindIndexBuffer, "vkCmdBindIndexBuffer");
215 			bindFunc(cast(void**)&vkCmdBindVertexBuffers, "vkCmdBindVertexBuffers");
216 			bindFunc(cast(void**)&vkCmdDraw, "vkCmdDraw");
217 			bindFunc(cast(void**)&vkCmdDrawIndexed, "vkCmdDrawIndexed");
218 			bindFunc(cast(void**)&vkCmdDrawIndirect, "vkCmdDrawIndirect");
219 			bindFunc(cast(void**)&vkCmdDrawIndexedIndirect, "vkCmdDrawIndexedIndirect");
220 			bindFunc(cast(void**)&vkCmdDispatch, "vkCmdDispatch");
221 			bindFunc(cast(void**)&vkCmdDispatchIndirect, "vkCmdDispatchIndirect");
222 			bindFunc(cast(void**)&vkCmdCopyBuffer, "vkCmdCopyBuffer");
223 			bindFunc(cast(void**)&vkCmdCopyImage, "vkCmdCopyImage");
224 			bindFunc(cast(void**)&vkCmdBlitImage, "vkCmdBlitImage");
225 			bindFunc(cast(void**)&vkCmdCopyBufferToImage, "vkCmdCopyBufferToImage");
226 			bindFunc(cast(void**)&vkCmdCopyImageToBuffer, "vkCmdCopyImageToBuffer");
227 			bindFunc(cast(void**)&vkCmdUpdateBuffer, "vkCmdUpdateBuffer");
228 			bindFunc(cast(void**)&vkCmdFillBuffer, "vkCmdFillBuffer");
229 			bindFunc(cast(void**)&vkCmdClearColorImage, "vkCmdClearColorImage");
230 			bindFunc(cast(void**)&vkCmdClearDepthStencilImage, "vkCmdClearDepthStencilImage");
231 			bindFunc(cast(void**)&vkCmdClearAttachments, "vkCmdClearAttachments");
232 			bindFunc(cast(void**)&vkCmdResolveImage, "vkCmdResolveImage");
233 			bindFunc(cast(void**)&vkCmdSetEvent, "vkCmdSetEvent");
234 			bindFunc(cast(void**)&vkCmdResetEvent, "vkCmdResetEvent");
235 			bindFunc(cast(void**)&vkCmdWaitEvents, "vkCmdWaitEvents");
236 			bindFunc(cast(void**)&vkCmdPipelineBarrier, "vkCmdPipelineBarrier");
237 			bindFunc(cast(void**)&vkCmdBeginQuery, "vkCmdBeginQuery");
238 			bindFunc(cast(void**)&vkCmdEndQuery, "vkCmdEndQuery");
239 			bindFunc(cast(void**)&vkCmdResetQueryPool, "vkCmdResetQueryPool");
240 			bindFunc(cast(void**)&vkCmdWriteTimestamp, "vkCmdWriteTimestamp");
241 			bindFunc(cast(void**)&vkCmdCopyQueryPoolResults, "vkCmdCopyQueryPoolResults");
242 			bindFunc(cast(void**)&vkCmdPushConstants, "vkCmdPushConstants");
243 			bindFunc(cast(void**)&vkCmdBeginRenderPass, "vkCmdBeginRenderPass");
244 			bindFunc(cast(void**)&vkCmdNextSubpass, "vkCmdNextSubpass");
245 			bindFunc(cast(void**)&vkCmdEndRenderPass, "vkCmdEndRenderPass");
246 			bindFunc(cast(void**)&vkCmdExecuteCommands, "vkCmdExecuteCommands");
247 
248 			bindFunc(cast(void**)&vkDestroySurfaceKHR, "vkDestroySurfaceKHR");
249 			bindFunc(cast(void**)&vkGetPhysicalDeviceSurfaceSupportKHR, "vkGetPhysicalDeviceSurfaceSupportKHR");
250 			bindFunc(cast(void**)&vkGetPhysicalDeviceSurfaceCapabilitiesKHR, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
251 			bindFunc(cast(void**)&vkGetPhysicalDeviceSurfaceFormatsKHR, "vkGetPhysicalDeviceSurfaceFormatsKHR");
252 			bindFunc(cast(void**)&vkGetPhysicalDeviceSurfacePresentModesKHR, "vkGetPhysicalDeviceSurfacePresentModesKHR");
253 			bindFunc(cast(void**)&vkCreateSwapchainKHR, "vkCreateSwapchainKHR");
254 			bindFunc(cast(void**)&vkDestroySwapchainKHR, "vkDestroySwapchainKHR");
255 			bindFunc(cast(void**)&vkGetSwapchainImagesKHR, "vkGetSwapchainImagesKHR");
256 			bindFunc(cast(void**)&vkAcquireNextImageKHR, "vkAcquireNextImageKHR");
257 			bindFunc(cast(void**)&vkQueuePresentKHR, "vkQueuePresentKHR");
258 			bindFunc(cast(void**)&vkGetPhysicalDeviceDisplayPropertiesKHR, "vkGetPhysicalDeviceDisplayPropertiesKHR");
259 			bindFunc(cast(void**)&vkGetPhysicalDeviceDisplayPlanePropertiesKHR, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
260 			bindFunc(cast(void**)&vkGetDisplayPlaneSupportedDisplaysKHR, "vkGetDisplayPlaneSupportedDisplaysKHR");
261 			bindFunc(cast(void**)&vkGetDisplayModePropertiesKHR, "vkGetDisplayModePropertiesKHR");
262 			bindFunc(cast(void**)&vkCreateDisplayModeKHR, "vkCreateDisplayModeKHR");
263 			bindFunc(cast(void**)&vkGetDisplayPlaneCapabilitiesKHR, "vkGetDisplayPlaneCapabilitiesKHR");
264 			bindFunc(cast(void**)&vkCreateDisplayPlaneSurfaceKHR, "vkCreateDisplayPlaneSurfaceKHR");
265 			bindFunc(cast(void**)&vkCreateSharedSwapchainsKHR, "vkCreateSharedSwapchainsKHR");
266 			version (VK_USE_PLATFORM_XLIB_KHR) {
267 				bindFunc(cast(void**)&vkCreateXlibSurfaceKHR, "vkCreateXlibSurfaceKHR");
268 				bindFunc(cast(void**)&vkGetPhysicalDeviceXlibPresentationSupportKHR, "vkGetPhysicalDeviceXlibPresentationSupportKHR");
269 			}
270 			version (VK_USE_PLATFORM_XCB_KHR) {
271 				bindFunc(cast(void**)&vkCreateXcbSurfaceKHR, "vkCreateXcbSurfaceKHR");
272 				bindFunc(cast(void**)&vkGetPhysicalDeviceXcbPresentationSupportKHR, "vkGetPhysicalDeviceXcbPresentationSupportKHR");
273 			}
274 			version (VK_USE_PLATFORM_WAYLAND_KHR) {
275 				bindFunc(cast(void**)&vkCreateWaylandSurfaceKHR, "vkCreateWaylandSurfaceKHR");
276 				bindFunc(cast(void**)&vkGetPhysicalDeviceWaylandPresentationSupportKHR, "vkGetPhysicalDeviceWaylandPresentationSupportKHR");
277 			}
278 			version (VK_USE_PLATFORM_MIR_KHR) {
279 				bindFunc(cast(void**)&vkCreateMirSurfaceKHR, "vkCreateMirSurfaceKHR");
280 				bindFunc(cast(void**)&vkGetPhysicalDeviceMirPresentationSupportKHR, "vkGetPhysicalDeviceMirPresentationSupportKHR");
281 			}
282 			version (VK_USE_PLATFORM_ANDROID_KHR) {
283 				bindFunc(cast(void**)&vkCreateAndroidSurfaceKHR, "vkCreateAndroidSurfaceKHR");
284 			}
285 			version (VK_USE_PLATFORM_WIN32_KHR) {
286 				bindFunc(cast(void**)&vkCreateWin32SurfaceKHR, "vkCreateWin32SurfaceKHR");
287 				bindFunc(cast(void**)&vkGetPhysicalDeviceWin32PresentationSupportKHR, "vkGetPhysicalDeviceWin32PresentationSupportKHR");
288 			}
289 			bindFunc(cast(void**)&vkDebugReportCallbackEXT, "vkDebugReportCallbackEXT");
290 			bindFunc(cast(void**)&vkCreateDebugReportCallbackEXT, "vkCreateDebugReportCallbackEXT");
291 			bindFunc(cast(void**)&vkDestroyDebugReportCallbackEXT, "vkDestroyDebugReportCallbackEXT");
292 			bindFunc(cast(void**)&vkDebugReportMessageEXT, "vkDebugReportMessageEXT");
293 		}
294 	}
295 	public {
296 		this() {
297 			super(libNames);
298 		}
299 	}
300 }
301 
302 __gshared DerelictVulkanLoader DerelictVulkan;
303 
304 shared static this() {
305 	DerelictVulkan = new DerelictVulkanLoader();
306 }
307 
308 shared static ~this() {
309 	DerelictVulkan.unload();
310 }