1 
2 /// Vulkan functions
3 module dvulkan.functions;
4 // THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY.
5 
6 import dvulkan.types;
7 import std.typetuple;
8 import std.traits;
9 import std.algorithm : startsWith;
10 version(DVulkanAllExtensions) {
11 	version = DVulkan_VK_VERSION_1_0;
12 	version = DVulkan_VK_KHR_surface;
13 	version = DVulkan_VK_KHR_swapchain;
14 	version = DVulkan_VK_KHR_display;
15 	version = DVulkan_VK_KHR_display_swapchain;
16 	version = DVulkan_VK_KHR_sampler_mirror_clamp_to_edge;
17 	version = DVulkan_VK_ANDROID_native_buffer;
18 	version = DVulkan_VK_EXT_debug_report;
19 	version = DVulkan_VK_NV_glsl_shader;
20 	version = DVulkan_VK_NV_extension_1;
21 	version = DVulkan_VK_IMG_filter_cubic;
22 	version = DVulkan_VK_AMD_extension_1;
23 	version = DVulkan_VK_AMD_extension_2;
24 	version = DVulkan_VK_AMD_rasterization_order;
25 	version = DVulkan_VK_AMD_extension_4;
26 	version = DVulkan_VK_AMD_extension_5;
27 	version = DVulkan_VK_AMD_extension_6;
28 	version = DVulkan_VK_EXT_debug_marker;
29 }
30 
31 extern(System) @nogc nothrow {
32 
33 /// Struct containing function pointers to all Vulkan functions.
34 struct VulkanFunctions {
35 	/// The instance that the functions were loaded from, if applicable.
36 	VkInstance instance;
37 	/// The device that the functions were loaded from, if applicable.
38 	VkDevice device;
39 	
40 	/// Loads the following functions, by calling the passed in vkGetInstanceProcAddr function:
41 	/// vkGetInstanceProcAddr (copies the one passed in),
42 	/// vkEnumerateInstanceExtensionProperties,
43 	/// vkEnumerateInstanceLayerProperties, and
44 	/// vkCreateInstance
45 	void loadInitializationFunctions(PFN_vkGetInstanceProcAddr getProcAddr) {
46 		vkGetInstanceProcAddr = getProcAddr;
47 		vkEnumerateInstanceExtensionProperties = cast(PFN_vkEnumerateInstanceExtensionProperties) vkGetInstanceProcAddr(null, "vkEnumerateInstanceExtensionProperties");
48 		vkEnumerateInstanceLayerProperties = cast(PFN_vkEnumerateInstanceLayerProperties) vkGetInstanceProcAddr(null, "vkEnumerateInstanceLayerProperties");
49 		vkCreateInstance = cast(PFN_vkCreateInstance) vkGetInstanceProcAddr(null, "vkCreateInstance");
50 	}
51 	
52 	/// Loads all functions from an instance (except functions loaded by loadInitializationFunctions).
53 	/// The functions may be used with any device created from this instance (but will have a slight dispatching overhead).
54 	/// Sets `instance` to the passed in instance.
55 	void loadInstanceFunctions(VkInstance instance) {
56 		assert(this.vkGetInstanceProcAddr, "loadInstanceFunctions called without vkGetInstanceProcAddr set");
57 		
58 		enum shouldLoad(string name) =
59 			name.startsWith("vk") &&
60 			staticIndexOf!(name,
61 				"vkGetInstanceProcAddr",
62 				"vkEnumerateInstanceExtensionProperties",
63 				"vkEnumerateInstanceLayerProperties",
64 				"vkCreateInstance",
65 			) == -1;
66 		alias funcsToLoad = Filter!(shouldLoad, AllFuncs);
67 		
68 		this.instance = instance;
69 		foreach(string name; funcsToLoad) {
70 			__traits(getMember, this, name) = cast(typeof(__traits(getMember, VulkanFunctions, name)))
71 				vkGetInstanceProcAddr(instance, name);
72 		}
73 	}
74 	
75 	/// Loads functions specific for a device.
76 	/// This loads all Vulkan functions that take a VkDevice, VkQueue, or VkCommandBuffer as their first argument.
77 	/// The functions may only be used with the passed-in device, and should be free of dispatching overhead.
78 	/// Sets `device` to the passed-in device.
79 	void loadDeviceFunctions(VkDevice device) {
80 		assert(this.vkGetDeviceProcAddr, "loadInstanceFunctions called without vkGetDeviceProcAddr set");
81 		
82 		enum shouldLoad(string name) =
83 			Parameters!(__traits(getMember, VulkanFunctions, "PFN_"~name)).length > 0 &&
84 			staticIndexOf!(Parameters!(__traits(getMember, VulkanFunctions, "PFN_"~name))[0], VkDevice, VkQueue, VkCommandBuffer) != -1;
85 		alias funcsToLoad = Filter!(shouldLoad, AllFuncs);
86 		
87 		this.device = device;
88 		foreach(string name; funcsToLoad) {
89 			__traits(getMember, this, name) = cast(typeof(__traits(getMember, VulkanFunctions, name)))
90 				vkGetDeviceProcAddr(device, name);
91 		}
92 	}
93 	
94 	private enum IsVKFunc(string name) = name.startsWith("vk");
95 	package alias AllFuncs = Filter!(IsVKFunc, __traits(allMembers, VulkanFunctions));
96 	version(DVulkan_VK_VERSION_1_0) {
97 		alias PFN_vkCreateInstance = VkResult function(const(VkInstanceCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkInstance* pInstance);
98 		PFN_vkCreateInstance vkCreateInstance;
99 		alias PFN_vkDestroyInstance = void function(VkInstance instance,const(VkAllocationCallbacks)* pAllocator);
100 		PFN_vkDestroyInstance vkDestroyInstance;
101 		alias PFN_vkEnumeratePhysicalDevices = VkResult function(VkInstance instance,uint32_t* pPhysicalDeviceCount,VkPhysicalDevice* pPhysicalDevices);
102 		PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
103 		alias PFN_vkGetPhysicalDeviceFeatures = void function(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures* pFeatures);
104 		PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
105 		alias PFN_vkGetPhysicalDeviceFormatProperties = void function(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties* pFormatProperties);
106 		PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
107 		alias PFN_vkGetPhysicalDeviceImageFormatProperties = VkResult function(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkImageFormatProperties* pImageFormatProperties);
108 		PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties;
109 		alias PFN_vkGetPhysicalDeviceProperties = void function(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties* pProperties);
110 		PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
111 		alias PFN_vkGetPhysicalDeviceQueueFamilyProperties = void function(VkPhysicalDevice physicalDevice,uint32_t* pQueueFamilyPropertyCount,VkQueueFamilyProperties* pQueueFamilyProperties);
112 		PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
113 		alias PFN_vkGetPhysicalDeviceMemoryProperties = void function(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties* pMemoryProperties);
114 		PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
115 		alias PFN_vkGetInstanceProcAddr = PFN_vkVoidFunction function(VkInstance instance,const(char)* pName);
116 		PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
117 		alias PFN_vkGetDeviceProcAddr = PFN_vkVoidFunction function(VkDevice device,const(char)* pName);
118 		PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
119 		alias PFN_vkCreateDevice = VkResult function(VkPhysicalDevice physicalDevice,const(VkDeviceCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkDevice* pDevice);
120 		PFN_vkCreateDevice vkCreateDevice;
121 		alias PFN_vkDestroyDevice = void function(VkDevice device,const(VkAllocationCallbacks)* pAllocator);
122 		PFN_vkDestroyDevice vkDestroyDevice;
123 		alias PFN_vkEnumerateInstanceExtensionProperties = VkResult function(const(char)* pLayerName,uint32_t* pPropertyCount,VkExtensionProperties* pProperties);
124 		PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
125 		alias PFN_vkEnumerateDeviceExtensionProperties = VkResult function(VkPhysicalDevice physicalDevice,const(char)* pLayerName,uint32_t* pPropertyCount,VkExtensionProperties* pProperties);
126 		PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
127 		alias PFN_vkEnumerateInstanceLayerProperties = VkResult function(uint32_t* pPropertyCount,VkLayerProperties* pProperties);
128 		PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
129 		alias PFN_vkEnumerateDeviceLayerProperties = VkResult function(VkPhysicalDevice physicalDevice,uint32_t* pPropertyCount,VkLayerProperties* pProperties);
130 		PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
131 		alias PFN_vkGetDeviceQueue = void function(VkDevice device,uint32_t queueFamilyIndex,uint32_t queueIndex,VkQueue* pQueue);
132 		PFN_vkGetDeviceQueue vkGetDeviceQueue;
133 		alias PFN_vkQueueSubmit = VkResult function(VkQueue queue,uint32_t submitCount,const(VkSubmitInfo)* pSubmits,VkFence fence);
134 		PFN_vkQueueSubmit vkQueueSubmit;
135 		alias PFN_vkQueueWaitIdle = VkResult function(VkQueue queue);
136 		PFN_vkQueueWaitIdle vkQueueWaitIdle;
137 		alias PFN_vkDeviceWaitIdle = VkResult function(VkDevice device);
138 		PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
139 		alias PFN_vkAllocateMemory = VkResult function(VkDevice device,const(VkMemoryAllocateInfo)* pAllocateInfo,const(VkAllocationCallbacks)* pAllocator,VkDeviceMemory* pMemory);
140 		PFN_vkAllocateMemory vkAllocateMemory;
141 		alias PFN_vkFreeMemory = void function(VkDevice device,VkDeviceMemory memory,const(VkAllocationCallbacks)* pAllocator);
142 		PFN_vkFreeMemory vkFreeMemory;
143 		alias PFN_vkMapMemory = VkResult function(VkDevice device,VkDeviceMemory memory,VkDeviceSize offset,VkDeviceSize size,VkMemoryMapFlags flags,void** ppData);
144 		PFN_vkMapMemory vkMapMemory;
145 		alias PFN_vkUnmapMemory = void function(VkDevice device,VkDeviceMemory memory);
146 		PFN_vkUnmapMemory vkUnmapMemory;
147 		alias PFN_vkFlushMappedMemoryRanges = VkResult function(VkDevice device,uint32_t memoryRangeCount,const(VkMappedMemoryRange)* pMemoryRanges);
148 		PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
149 		alias PFN_vkInvalidateMappedMemoryRanges = VkResult function(VkDevice device,uint32_t memoryRangeCount,const(VkMappedMemoryRange)* pMemoryRanges);
150 		PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
151 		alias PFN_vkGetDeviceMemoryCommitment = void function(VkDevice device,VkDeviceMemory memory,VkDeviceSize* pCommittedMemoryInBytes);
152 		PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment;
153 		alias PFN_vkBindBufferMemory = VkResult function(VkDevice device,VkBuffer buffer,VkDeviceMemory memory,VkDeviceSize memoryOffset);
154 		PFN_vkBindBufferMemory vkBindBufferMemory;
155 		alias PFN_vkBindImageMemory = VkResult function(VkDevice device,VkImage image,VkDeviceMemory memory,VkDeviceSize memoryOffset);
156 		PFN_vkBindImageMemory vkBindImageMemory;
157 		alias PFN_vkGetBufferMemoryRequirements = void function(VkDevice device,VkBuffer buffer,VkMemoryRequirements* pMemoryRequirements);
158 		PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
159 		alias PFN_vkGetImageMemoryRequirements = void function(VkDevice device,VkImage image,VkMemoryRequirements* pMemoryRequirements);
160 		PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
161 		alias PFN_vkGetImageSparseMemoryRequirements = void function(VkDevice device,VkImage image,uint32_t* pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
162 		PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
163 		alias PFN_vkGetPhysicalDeviceSparseImageFormatProperties = void function(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkSampleCountFlagBits samples,VkImageUsageFlags usage,VkImageTiling tiling,uint32_t* pPropertyCount,VkSparseImageFormatProperties* pProperties);
164 		PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties;
165 		alias PFN_vkQueueBindSparse = VkResult function(VkQueue queue,uint32_t bindInfoCount,const(VkBindSparseInfo)* pBindInfo,VkFence fence);
166 		PFN_vkQueueBindSparse vkQueueBindSparse;
167 		alias PFN_vkCreateFence = VkResult function(VkDevice device,const(VkFenceCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkFence* pFence);
168 		PFN_vkCreateFence vkCreateFence;
169 		alias PFN_vkDestroyFence = void function(VkDevice device,VkFence fence,const(VkAllocationCallbacks)* pAllocator);
170 		PFN_vkDestroyFence vkDestroyFence;
171 		alias PFN_vkResetFences = VkResult function(VkDevice device,uint32_t fenceCount,const(VkFence)* pFences);
172 		PFN_vkResetFences vkResetFences;
173 		alias PFN_vkGetFenceStatus = VkResult function(VkDevice device,VkFence fence);
174 		PFN_vkGetFenceStatus vkGetFenceStatus;
175 		alias PFN_vkWaitForFences = VkResult function(VkDevice device,uint32_t fenceCount,const(VkFence)* pFences,VkBool32 waitAll,uint64_t timeout);
176 		PFN_vkWaitForFences vkWaitForFences;
177 		alias PFN_vkCreateSemaphore = VkResult function(VkDevice device,const(VkSemaphoreCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkSemaphore* pSemaphore);
178 		PFN_vkCreateSemaphore vkCreateSemaphore;
179 		alias PFN_vkDestroySemaphore = void function(VkDevice device,VkSemaphore semaphore,const(VkAllocationCallbacks)* pAllocator);
180 		PFN_vkDestroySemaphore vkDestroySemaphore;
181 		alias PFN_vkCreateEvent = VkResult function(VkDevice device,const(VkEventCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkEvent* pEvent);
182 		PFN_vkCreateEvent vkCreateEvent;
183 		alias PFN_vkDestroyEvent = void function(VkDevice device,VkEvent event,const(VkAllocationCallbacks)* pAllocator);
184 		PFN_vkDestroyEvent vkDestroyEvent;
185 		alias PFN_vkGetEventStatus = VkResult function(VkDevice device,VkEvent event);
186 		PFN_vkGetEventStatus vkGetEventStatus;
187 		alias PFN_vkSetEvent = VkResult function(VkDevice device,VkEvent event);
188 		PFN_vkSetEvent vkSetEvent;
189 		alias PFN_vkResetEvent = VkResult function(VkDevice device,VkEvent event);
190 		PFN_vkResetEvent vkResetEvent;
191 		alias PFN_vkCreateQueryPool = VkResult function(VkDevice device,const(VkQueryPoolCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkQueryPool* pQueryPool);
192 		PFN_vkCreateQueryPool vkCreateQueryPool;
193 		alias PFN_vkDestroyQueryPool = void function(VkDevice device,VkQueryPool queryPool,const(VkAllocationCallbacks)* pAllocator);
194 		PFN_vkDestroyQueryPool vkDestroyQueryPool;
195 		alias PFN_vkGetQueryPoolResults = VkResult function(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,size_t dataSize,void* pData,VkDeviceSize stride,VkQueryResultFlags flags);
196 		PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
197 		alias PFN_vkCreateBuffer = VkResult function(VkDevice device,const(VkBufferCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkBuffer* pBuffer);
198 		PFN_vkCreateBuffer vkCreateBuffer;
199 		alias PFN_vkDestroyBuffer = void function(VkDevice device,VkBuffer buffer,const(VkAllocationCallbacks)* pAllocator);
200 		PFN_vkDestroyBuffer vkDestroyBuffer;
201 		alias PFN_vkCreateBufferView = VkResult function(VkDevice device,const(VkBufferViewCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkBufferView* pView);
202 		PFN_vkCreateBufferView vkCreateBufferView;
203 		alias PFN_vkDestroyBufferView = void function(VkDevice device,VkBufferView bufferView,const(VkAllocationCallbacks)* pAllocator);
204 		PFN_vkDestroyBufferView vkDestroyBufferView;
205 		alias PFN_vkCreateImage = VkResult function(VkDevice device,const(VkImageCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkImage* pImage);
206 		PFN_vkCreateImage vkCreateImage;
207 		alias PFN_vkDestroyImage = void function(VkDevice device,VkImage image,const(VkAllocationCallbacks)* pAllocator);
208 		PFN_vkDestroyImage vkDestroyImage;
209 		alias PFN_vkGetImageSubresourceLayout = void function(VkDevice device,VkImage image,const(VkImageSubresource)* pSubresource,VkSubresourceLayout* pLayout);
210 		PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
211 		alias PFN_vkCreateImageView = VkResult function(VkDevice device,const(VkImageViewCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkImageView* pView);
212 		PFN_vkCreateImageView vkCreateImageView;
213 		alias PFN_vkDestroyImageView = void function(VkDevice device,VkImageView imageView,const(VkAllocationCallbacks)* pAllocator);
214 		PFN_vkDestroyImageView vkDestroyImageView;
215 		alias PFN_vkCreateShaderModule = VkResult function(VkDevice device,const(VkShaderModuleCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkShaderModule* pShaderModule);
216 		PFN_vkCreateShaderModule vkCreateShaderModule;
217 		alias PFN_vkDestroyShaderModule = void function(VkDevice device,VkShaderModule shaderModule,const(VkAllocationCallbacks)* pAllocator);
218 		PFN_vkDestroyShaderModule vkDestroyShaderModule;
219 		alias PFN_vkCreatePipelineCache = VkResult function(VkDevice device,const(VkPipelineCacheCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkPipelineCache* pPipelineCache);
220 		PFN_vkCreatePipelineCache vkCreatePipelineCache;
221 		alias PFN_vkDestroyPipelineCache = void function(VkDevice device,VkPipelineCache pipelineCache,const(VkAllocationCallbacks)* pAllocator);
222 		PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
223 		alias PFN_vkGetPipelineCacheData = VkResult function(VkDevice device,VkPipelineCache pipelineCache,size_t* pDataSize,void* pData);
224 		PFN_vkGetPipelineCacheData vkGetPipelineCacheData;
225 		alias PFN_vkMergePipelineCaches = VkResult function(VkDevice device,VkPipelineCache dstCache,uint32_t srcCacheCount,const(VkPipelineCache)* pSrcCaches);
226 		PFN_vkMergePipelineCaches vkMergePipelineCaches;
227 		alias PFN_vkCreateGraphicsPipelines = VkResult function(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const(VkGraphicsPipelineCreateInfo)* pCreateInfos,const(VkAllocationCallbacks)* pAllocator,VkPipeline* pPipelines);
228 		PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
229 		alias PFN_vkCreateComputePipelines = VkResult function(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const(VkComputePipelineCreateInfo)* pCreateInfos,const(VkAllocationCallbacks)* pAllocator,VkPipeline* pPipelines);
230 		PFN_vkCreateComputePipelines vkCreateComputePipelines;
231 		alias PFN_vkDestroyPipeline = void function(VkDevice device,VkPipeline pipeline,const(VkAllocationCallbacks)* pAllocator);
232 		PFN_vkDestroyPipeline vkDestroyPipeline;
233 		alias PFN_vkCreatePipelineLayout = VkResult function(VkDevice device,const(VkPipelineLayoutCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkPipelineLayout* pPipelineLayout);
234 		PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
235 		alias PFN_vkDestroyPipelineLayout = void function(VkDevice device,VkPipelineLayout pipelineLayout,const(VkAllocationCallbacks)* pAllocator);
236 		PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
237 		alias PFN_vkCreateSampler = VkResult function(VkDevice device,const(VkSamplerCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkSampler* pSampler);
238 		PFN_vkCreateSampler vkCreateSampler;
239 		alias PFN_vkDestroySampler = void function(VkDevice device,VkSampler sampler,const(VkAllocationCallbacks)* pAllocator);
240 		PFN_vkDestroySampler vkDestroySampler;
241 		alias PFN_vkCreateDescriptorSetLayout = VkResult function(VkDevice device,const(VkDescriptorSetLayoutCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkDescriptorSetLayout* pSetLayout);
242 		PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
243 		alias PFN_vkDestroyDescriptorSetLayout = void function(VkDevice device,VkDescriptorSetLayout descriptorSetLayout,const(VkAllocationCallbacks)* pAllocator);
244 		PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
245 		alias PFN_vkCreateDescriptorPool = VkResult function(VkDevice device,const(VkDescriptorPoolCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkDescriptorPool* pDescriptorPool);
246 		PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
247 		alias PFN_vkDestroyDescriptorPool = void function(VkDevice device,VkDescriptorPool descriptorPool,const(VkAllocationCallbacks)* pAllocator);
248 		PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
249 		alias PFN_vkResetDescriptorPool = VkResult function(VkDevice device,VkDescriptorPool descriptorPool,VkDescriptorPoolResetFlags flags);
250 		PFN_vkResetDescriptorPool vkResetDescriptorPool;
251 		alias PFN_vkAllocateDescriptorSets = VkResult function(VkDevice device,const(VkDescriptorSetAllocateInfo)* pAllocateInfo,VkDescriptorSet* pDescriptorSets);
252 		PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
253 		alias PFN_vkFreeDescriptorSets = VkResult function(VkDevice device,VkDescriptorPool descriptorPool,uint32_t descriptorSetCount,const(VkDescriptorSet)* pDescriptorSets);
254 		PFN_vkFreeDescriptorSets vkFreeDescriptorSets;
255 		alias PFN_vkUpdateDescriptorSets = void function(VkDevice device,uint32_t descriptorWriteCount,const(VkWriteDescriptorSet)* pDescriptorWrites,uint32_t descriptorCopyCount,const(VkCopyDescriptorSet)* pDescriptorCopies);
256 		PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
257 		alias PFN_vkCreateFramebuffer = VkResult function(VkDevice device,const(VkFramebufferCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkFramebuffer* pFramebuffer);
258 		PFN_vkCreateFramebuffer vkCreateFramebuffer;
259 		alias PFN_vkDestroyFramebuffer = void function(VkDevice device,VkFramebuffer framebuffer,const(VkAllocationCallbacks)* pAllocator);
260 		PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
261 		alias PFN_vkCreateRenderPass = VkResult function(VkDevice device,const(VkRenderPassCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkRenderPass* pRenderPass);
262 		PFN_vkCreateRenderPass vkCreateRenderPass;
263 		alias PFN_vkDestroyRenderPass = void function(VkDevice device,VkRenderPass renderPass,const(VkAllocationCallbacks)* pAllocator);
264 		PFN_vkDestroyRenderPass vkDestroyRenderPass;
265 		alias PFN_vkGetRenderAreaGranularity = void function(VkDevice device,VkRenderPass renderPass,VkExtent2D* pGranularity);
266 		PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity;
267 		alias PFN_vkCreateCommandPool = VkResult function(VkDevice device,const(VkCommandPoolCreateInfo)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkCommandPool* pCommandPool);
268 		PFN_vkCreateCommandPool vkCreateCommandPool;
269 		alias PFN_vkDestroyCommandPool = void function(VkDevice device,VkCommandPool commandPool,const(VkAllocationCallbacks)* pAllocator);
270 		PFN_vkDestroyCommandPool vkDestroyCommandPool;
271 		alias PFN_vkResetCommandPool = VkResult function(VkDevice device,VkCommandPool commandPool,VkCommandPoolResetFlags flags);
272 		PFN_vkResetCommandPool vkResetCommandPool;
273 		alias PFN_vkAllocateCommandBuffers = VkResult function(VkDevice device,const(VkCommandBufferAllocateInfo)* pAllocateInfo,VkCommandBuffer* pCommandBuffers);
274 		PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
275 		alias PFN_vkFreeCommandBuffers = void function(VkDevice device,VkCommandPool commandPool,uint32_t commandBufferCount,const(VkCommandBuffer)* pCommandBuffers);
276 		PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
277 		alias PFN_vkBeginCommandBuffer = VkResult function(VkCommandBuffer commandBuffer,const(VkCommandBufferBeginInfo)* pBeginInfo);
278 		PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
279 		alias PFN_vkEndCommandBuffer = VkResult function(VkCommandBuffer commandBuffer);
280 		PFN_vkEndCommandBuffer vkEndCommandBuffer;
281 		alias PFN_vkResetCommandBuffer = VkResult function(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags);
282 		PFN_vkResetCommandBuffer vkResetCommandBuffer;
283 		alias PFN_vkCmdBindPipeline = void function(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipeline pipeline);
284 		PFN_vkCmdBindPipeline vkCmdBindPipeline;
285 		alias PFN_vkCmdSetViewport = void function(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const(VkViewport)* pViewports);
286 		PFN_vkCmdSetViewport vkCmdSetViewport;
287 		alias PFN_vkCmdSetScissor = void function(VkCommandBuffer commandBuffer,uint32_t firstScissor,uint32_t scissorCount,const(VkRect2D)* pScissors);
288 		PFN_vkCmdSetScissor vkCmdSetScissor;
289 		alias PFN_vkCmdSetLineWidth = void function(VkCommandBuffer commandBuffer,float lineWidth);
290 		PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
291 		alias PFN_vkCmdSetDepthBias = void function(VkCommandBuffer commandBuffer,float depthBiasConstantFactor,float depthBiasClamp,float depthBiasSlopeFactor);
292 		PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
293 		alias PFN_vkCmdSetBlendConstants = void function(VkCommandBuffer commandBuffer,const float[4] blendConstants);
294 		PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants;
295 		alias PFN_vkCmdSetDepthBounds = void function(VkCommandBuffer commandBuffer,float minDepthBounds,float maxDepthBounds);
296 		PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds;
297 		alias PFN_vkCmdSetStencilCompareMask = void function(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t compareMask);
298 		PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;
299 		alias PFN_vkCmdSetStencilWriteMask = void function(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t writeMask);
300 		PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;
301 		alias PFN_vkCmdSetStencilReference = void function(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t reference);
302 		PFN_vkCmdSetStencilReference vkCmdSetStencilReference;
303 		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);
304 		PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
305 		alias PFN_vkCmdBindIndexBuffer = void function(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkIndexType indexType);
306 		PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
307 		alias PFN_vkCmdBindVertexBuffers = void function(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const(VkBuffer)* pBuffers,const(VkDeviceSize)* pOffsets);
308 		PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
309 		alias PFN_vkCmdDraw = void function(VkCommandBuffer commandBuffer,uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance);
310 		PFN_vkCmdDraw vkCmdDraw;
311 		alias PFN_vkCmdDrawIndexed = void function(VkCommandBuffer commandBuffer,uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance);
312 		PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
313 		alias PFN_vkCmdDrawIndirect = void function(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride);
314 		PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
315 		alias PFN_vkCmdDrawIndexedIndirect = void function(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride);
316 		PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
317 		alias PFN_vkCmdDispatch = void function(VkCommandBuffer commandBuffer,uint32_t x,uint32_t y,uint32_t z);
318 		PFN_vkCmdDispatch vkCmdDispatch;
319 		alias PFN_vkCmdDispatchIndirect = void function(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset);
320 		PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect;
321 		alias PFN_vkCmdCopyBuffer = void function(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkBuffer dstBuffer,uint32_t regionCount,const(VkBufferCopy)* pRegions);
322 		PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
323 		alias PFN_vkCmdCopyImage = void function(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const(VkImageCopy)* pRegions);
324 		PFN_vkCmdCopyImage vkCmdCopyImage;
325 		alias PFN_vkCmdBlitImage = void function(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const(VkImageBlit)* pRegions,VkFilter filter);
326 		PFN_vkCmdBlitImage vkCmdBlitImage;
327 		alias PFN_vkCmdCopyBufferToImage = void function(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const(VkBufferImageCopy)* pRegions);
328 		PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
329 		alias PFN_vkCmdCopyImageToBuffer = void function(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkBuffer dstBuffer,uint32_t regionCount,const(VkBufferImageCopy)* pRegions);
330 		PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer;
331 		alias PFN_vkCmdUpdateBuffer = void function(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize dataSize,const(uint32_t)* pData);
332 		PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer;
333 		alias PFN_vkCmdFillBuffer = void function(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize size,uint32_t data);
334 		PFN_vkCmdFillBuffer vkCmdFillBuffer;
335 		alias PFN_vkCmdClearColorImage = void function(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const(VkClearColorValue)* pColor,uint32_t rangeCount,const(VkImageSubresourceRange)* pRanges);
336 		PFN_vkCmdClearColorImage vkCmdClearColorImage;
337 		alias PFN_vkCmdClearDepthStencilImage = void function(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const(VkClearDepthStencilValue)* pDepthStencil,uint32_t rangeCount,const(VkImageSubresourceRange)* pRanges);
338 		PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage;
339 		alias PFN_vkCmdClearAttachments = void function(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const(VkClearAttachment)* pAttachments,uint32_t rectCount,const(VkClearRect)* pRects);
340 		PFN_vkCmdClearAttachments vkCmdClearAttachments;
341 		alias PFN_vkCmdResolveImage = void function(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const(VkImageResolve)* pRegions);
342 		PFN_vkCmdResolveImage vkCmdResolveImage;
343 		alias PFN_vkCmdSetEvent = void function(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask);
344 		PFN_vkCmdSetEvent vkCmdSetEvent;
345 		alias PFN_vkCmdResetEvent = void function(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask);
346 		PFN_vkCmdResetEvent vkCmdResetEvent;
347 		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);
348 		PFN_vkCmdWaitEvents vkCmdWaitEvents;
349 		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);
350 		PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
351 		alias PFN_vkCmdBeginQuery = void function(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags);
352 		PFN_vkCmdBeginQuery vkCmdBeginQuery;
353 		alias PFN_vkCmdEndQuery = void function(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query);
354 		PFN_vkCmdEndQuery vkCmdEndQuery;
355 		alias PFN_vkCmdResetQueryPool = void function(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount);
356 		PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
357 		alias PFN_vkCmdWriteTimestamp = void function(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkQueryPool queryPool,uint32_t query);
358 		PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp;
359 		alias PFN_vkCmdCopyQueryPoolResults = void function(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize stride,VkQueryResultFlags flags);
360 		PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
361 		alias PFN_vkCmdPushConstants = void function(VkCommandBuffer commandBuffer,VkPipelineLayout layout,VkShaderStageFlags stageFlags,uint32_t offset,uint32_t size,const(void)* pValues);
362 		PFN_vkCmdPushConstants vkCmdPushConstants;
363 		alias PFN_vkCmdBeginRenderPass = void function(VkCommandBuffer commandBuffer,const(VkRenderPassBeginInfo)* pRenderPassBegin,VkSubpassContents contents);
364 		PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
365 		alias PFN_vkCmdNextSubpass = void function(VkCommandBuffer commandBuffer,VkSubpassContents contents);
366 		PFN_vkCmdNextSubpass vkCmdNextSubpass;
367 		alias PFN_vkCmdEndRenderPass = void function(VkCommandBuffer commandBuffer);
368 		PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
369 		alias PFN_vkCmdExecuteCommands = void function(VkCommandBuffer commandBuffer,uint32_t commandBufferCount,const(VkCommandBuffer)* pCommandBuffers);
370 		PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
371 	}
372 	version(DVulkan_VK_KHR_surface) {
373 		alias PFN_vkDestroySurfaceKHR = void function(VkInstance instance,VkSurfaceKHR surface,const(VkAllocationCallbacks)* pAllocator);
374 		PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
375 		alias PFN_vkGetPhysicalDeviceSurfaceSupportKHR = VkResult function(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,VkSurfaceKHR surface,VkBool32* pSupported);
376 		PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR;
377 		alias PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = VkResult function(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
378 		PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
379 		alias PFN_vkGetPhysicalDeviceSurfaceFormatsKHR = VkResult function(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t* pSurfaceFormatCount,VkSurfaceFormatKHR* pSurfaceFormats);
380 		PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
381 		alias PFN_vkGetPhysicalDeviceSurfacePresentModesKHR = VkResult function(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t* pPresentModeCount,VkPresentModeKHR* pPresentModes);
382 		PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR;
383 	}
384 	version(DVulkan_VK_KHR_swapchain) {
385 		alias PFN_vkCreateSwapchainKHR = VkResult function(VkDevice device,const(VkSwapchainCreateInfoKHR)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkSwapchainKHR* pSwapchain);
386 		PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;
387 		alias PFN_vkDestroySwapchainKHR = void function(VkDevice device,VkSwapchainKHR swapchain,const(VkAllocationCallbacks)* pAllocator);
388 		PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
389 		alias PFN_vkGetSwapchainImagesKHR = VkResult function(VkDevice device,VkSwapchainKHR swapchain,uint32_t* pSwapchainImageCount,VkImage* pSwapchainImages);
390 		PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
391 		alias PFN_vkAcquireNextImageKHR = VkResult function(VkDevice device,VkSwapchainKHR swapchain,uint64_t timeout,VkSemaphore semaphore,VkFence fence,uint32_t* pImageIndex);
392 		PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
393 		alias PFN_vkQueuePresentKHR = VkResult function(VkQueue queue,const(VkPresentInfoKHR)* pPresentInfo);
394 		PFN_vkQueuePresentKHR vkQueuePresentKHR;
395 	}
396 	version(DVulkan_VK_KHR_display) {
397 		alias PFN_vkGetPhysicalDeviceDisplayPropertiesKHR = VkResult function(VkPhysicalDevice physicalDevice,uint32_t* pPropertyCount,VkDisplayPropertiesKHR* pProperties);
398 		PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR;
399 		alias PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR = VkResult function(VkPhysicalDevice physicalDevice,uint32_t* pPropertyCount,VkDisplayPlanePropertiesKHR* pProperties);
400 		PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR;
401 		alias PFN_vkGetDisplayPlaneSupportedDisplaysKHR = VkResult function(VkPhysicalDevice physicalDevice,uint32_t planeIndex,uint32_t* pDisplayCount,VkDisplayKHR* pDisplays);
402 		PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR;
403 		alias PFN_vkGetDisplayModePropertiesKHR = VkResult function(VkPhysicalDevice physicalDevice,VkDisplayKHR display,uint32_t* pPropertyCount,VkDisplayModePropertiesKHR* pProperties);
404 		PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR;
405 		alias PFN_vkCreateDisplayModeKHR = VkResult function(VkPhysicalDevice physicalDevice,VkDisplayKHR display,const(VkDisplayModeCreateInfoKHR)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkDisplayModeKHR* pMode);
406 		PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR;
407 		alias PFN_vkGetDisplayPlaneCapabilitiesKHR = VkResult function(VkPhysicalDevice physicalDevice,VkDisplayModeKHR mode,uint32_t planeIndex,VkDisplayPlaneCapabilitiesKHR* pCapabilities);
408 		PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR;
409 		alias PFN_vkCreateDisplayPlaneSurfaceKHR = VkResult function(VkInstance instance,const(VkDisplaySurfaceCreateInfoKHR)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkSurfaceKHR* pSurface);
410 		PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR;
411 	}
412 	version(DVulkan_VK_KHR_display_swapchain) {
413 		alias PFN_vkCreateSharedSwapchainsKHR = VkResult function(VkDevice device,uint32_t swapchainCount,const(VkSwapchainCreateInfoKHR)* pCreateInfos,const(VkAllocationCallbacks)* pAllocator,VkSwapchainKHR* pSwapchains);
414 		PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
415 	}
416 	version(DVulkan_VK_EXT_debug_report) {
417 		alias PFN_vkCreateDebugReportCallbackEXT = VkResult function(VkInstance instance,const(VkDebugReportCallbackCreateInfoEXT)* pCreateInfo,const(VkAllocationCallbacks)* pAllocator,VkDebugReportCallbackEXT* pCallback);
418 		PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;
419 		alias PFN_vkDestroyDebugReportCallbackEXT = void function(VkInstance instance,VkDebugReportCallbackEXT callback,const(VkAllocationCallbacks)* pAllocator);
420 		PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;
421 		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);
422 		PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;
423 	}
424 	version(DVulkan_VK_EXT_debug_marker) {
425 		alias PFN_vkDebugMarkerSetObjectTagEXT = VkResult function(VkDevice device,VkDebugMarkerObjectTagInfoEXT* pTagInfo);
426 		PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT;
427 		alias PFN_vkDebugMarkerSetObjectNameEXT = VkResult function(VkDevice device,VkDebugMarkerObjectNameInfoEXT* pNameInfo);
428 		PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT;
429 		alias PFN_vkCmdDebugMarkerBeginEXT = void function(VkCommandBuffer commandBuffer,VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
430 		PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT;
431 		alias PFN_vkCmdDebugMarkerEndEXT = void function(VkCommandBuffer commandBuffer);
432 		PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT;
433 		alias PFN_vkCmdDebugMarkerInsertEXT = void function(VkCommandBuffer commandBuffer,VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
434 		PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT;
435 	}
436 }}
437 
438 
439 version(DVulkanDerelict) {
440 	version(Have_derelict_util) {}
441 	else static assert(false, "DVulkanDerelict specified but derelict-util is not available. Add derelict-util to your dependencies.");
442 	
443 	import derelict.util.loader;
444 	import derelict.util.system;
445 	
446 	private {
447 		version(Windows)
448 			enum libNames = "vulkan-1.dll";
449 		else version(linux)
450 			enum libNames = "libvulkan.so.1";
451 		else
452 			static assert(0,"Need to implement DVulkan libNames for this operating system.");
453 	}
454 	
455 	/// Loader using Derelict to load the Vulkan shared library.
456 	class DVulkanDerelictLoader : SharedLibLoader {
457 		private VulkanFunctions.PFN_vkGetInstanceProcAddr getInstanceProcAddr;
458 		this() {
459 			super(libNames);
460 		}
461 		
462 		protected override void loadSymbols() {
463 			bindFunc(cast(void**)&getInstanceProcAddr, "vkGetInstanceProcAddr");
464 		}
465 		
466 		/// Returns initialization function pointers from the shared library.
467 		/// See VulkanFunctions.loadInitializationFunctions.
468 		VulkanFunctions getInitializationFunctions() {
469 			assert(getInstanceProcAddr, "getInitializationFunctions called before library loaded");
470 			VulkanFunctions funcs;
471 			funcs.loadInitializationFunctions(getInstanceProcAddr);
472 			return funcs;
473 		}
474 		
475 		version(DVulkanGlobalFunctions) {
476 			/// Loads initialization function pointers from the shared library to the global functions.
477 			/// See VulkanFunctions.loadInitializationFunctions.
478 			void loadInitializationFunctions() {
479 				assert(getInstanceProcAddr, "loadInitializationFunctions called before library loaded");
480 				static import dvulkan.global;
481 				dvulkan.global.loadInitializationFunctions(getInstanceProcAddr);
482 			}
483 		}
484 	}
485 	
486 	__gshared DVulkanDerelictLoader DVulkanDerelict;
487 	
488 	shared static this() {
489 		DVulkanDerelict = new DVulkanDerelictLoader();
490 	}
491 }