1use std::ffi::{c_char, c_void};
6use crate::sys::*;
7use crate::core::*;
8
9pub const VK_ERROR_OUT_OF_POOL_MEMORY: i32 = -1000069000;
11
12#[repr(i32)]
14#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
15pub enum VkResult {
16 Success = 0,
17 NotReady = 1,
18 Timeout = 2,
19 EventSet = 3,
20 EventReset = 4,
21 Incomplete = 5,
22 ErrorOutOfHostMemory = -1,
23 ErrorOutOfDeviceMemory = -2,
24 ErrorInitializationFailed = -3,
25 ErrorDeviceLost = -4,
26 ErrorMemoryMapFailed = -5,
27 ErrorLayerNotPresent = -6,
28 ErrorExtensionNotPresent = -7,
29 ErrorFeatureNotPresent = -8,
30 ErrorIncompatibleDriver = -9,
31 ErrorTooManyObjects = -10,
32 ErrorFormatNotSupported = -11,
33 ErrorFragmentedPool = -12,
34 ErrorUnknown = -13,
35 ErrorOutOfPoolMemory = VK_ERROR_OUT_OF_POOL_MEMORY,
36}
37
38#[repr(C)]
40#[derive(Debug, Clone, Copy)]
41pub struct VkAllocationCallbacks {
42 pub pUserData: *mut c_void,
43 pub pfnAllocation: Option<unsafe extern "C" fn(*mut c_void, usize, usize, VkSystemAllocationScope) -> *mut c_void>,
44 pub pfnReallocation: Option<unsafe extern "C" fn(*mut c_void, *mut c_void, usize, usize, VkSystemAllocationScope) -> *mut c_void>,
45 pub pfnFree: Option<unsafe extern "C" fn(*mut c_void, *mut c_void)>,
46 pub pfnInternalAllocation: Option<unsafe extern "C" fn(*mut c_void, usize, VkInternalAllocationType, VkSystemAllocationScope)>,
47 pub pfnInternalFree: Option<unsafe extern "C" fn(*mut c_void, usize, VkInternalAllocationType, VkSystemAllocationScope)>,
48}
49
50unsafe impl Send for VkAllocationCallbacks {}
52unsafe impl Sync for VkAllocationCallbacks {}
53
54#[repr(i32)]
55#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
56pub enum VkSystemAllocationScope {
57 Command = 0,
58 Object = 1,
59 Cache = 2,
60 Device = 3,
61 Instance = 4,
62}
63
64#[repr(i32)]
65#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
66pub enum VkInternalAllocationType {
67 Executable = 0,
68}
69
70pub type PFN_vkVoidFunction = Option<unsafe extern "C" fn()>;
72
73pub type PFN_vkGetInstanceProcAddr = Option<unsafe extern "C" fn(
75 instance: VkInstance,
76 pName: *const c_char,
77) -> PFN_vkVoidFunction>;
78
79pub type PFN_vkGetDeviceProcAddr = Option<unsafe extern "C" fn(
80 device: VkDevice,
81 pName: *const c_char,
82) -> PFN_vkVoidFunction>;
83
84pub type PFN_vkCreateInstance = Option<unsafe extern "C" fn(
86 pCreateInfo: *const VkInstanceCreateInfo,
87 pAllocator: *const VkAllocationCallbacks,
88 pInstance: *mut VkInstance,
89) -> VkResult>;
90
91pub type PFN_vkDestroyInstance = Option<unsafe extern "C" fn(
92 instance: VkInstance,
93 pAllocator: *const VkAllocationCallbacks,
94)>;
95
96pub type PFN_vkEnumeratePhysicalDevices = Option<unsafe extern "C" fn(
97 instance: VkInstance,
98 pPhysicalDeviceCount: *mut u32,
99 pPhysicalDevices: *mut VkPhysicalDevice,
100) -> VkResult>;
101
102pub type PFN_vkGetPhysicalDeviceProperties = Option<unsafe extern "C" fn(
103 physicalDevice: VkPhysicalDevice,
104 pProperties: *mut VkPhysicalDeviceProperties,
105)>;
106
107pub type PFN_vkGetPhysicalDeviceQueueFamilyProperties = Option<unsafe extern "C" fn(
108 physicalDevice: VkPhysicalDevice,
109 pQueueFamilyPropertyCount: *mut u32,
110 pQueueFamilyProperties: *mut VkQueueFamilyProperties,
111)>;
112
113pub type PFN_vkGetPhysicalDeviceMemoryProperties = Option<unsafe extern "C" fn(
114 physicalDevice: VkPhysicalDevice,
115 pMemoryProperties: *mut VkPhysicalDeviceMemoryProperties,
116)>;
117
118pub type PFN_vkGetPhysicalDeviceFeatures = Option<unsafe extern "C" fn(
119 physicalDevice: VkPhysicalDevice,
120 pFeatures: *mut VkPhysicalDeviceFeatures,
121)>;
122
123pub type PFN_vkCreateDevice = Option<unsafe extern "C" fn(
125 physicalDevice: VkPhysicalDevice,
126 pCreateInfo: *const VkDeviceCreateInfo,
127 pAllocator: *const VkAllocationCallbacks,
128 pDevice: *mut VkDevice,
129) -> VkResult>;
130
131pub type PFN_vkDestroyDevice = Option<unsafe extern "C" fn(
132 device: VkDevice,
133 pAllocator: *const VkAllocationCallbacks,
134)>;
135
136pub type PFN_vkGetDeviceQueue = Option<unsafe extern "C" fn(
137 device: VkDevice,
138 queueFamilyIndex: u32,
139 queueIndex: u32,
140 pQueue: *mut VkQueue,
141)>;
142
143pub type PFN_vkQueueSubmit = Option<unsafe extern "C" fn(
144 queue: VkQueue,
145 submitCount: u32,
146 pSubmits: *const VkSubmitInfo,
147 fence: VkFence,
148) -> VkResult>;
149
150pub type PFN_vkQueueWaitIdle = Option<unsafe extern "C" fn(
151 queue: VkQueue,
152) -> VkResult>;
153
154pub type PFN_vkDeviceWaitIdle = Option<unsafe extern "C" fn(
155 device: VkDevice,
156) -> VkResult>;
157
158pub type PFN_vkAllocateMemory = Option<unsafe extern "C" fn(
160 device: VkDevice,
161 pAllocateInfo: *const VkMemoryAllocateInfo,
162 pAllocator: *const VkAllocationCallbacks,
163 pMemory: *mut VkDeviceMemory,
164) -> VkResult>;
165
166pub type PFN_vkFreeMemory = Option<unsafe extern "C" fn(
167 device: VkDevice,
168 memory: VkDeviceMemory,
169 pAllocator: *const VkAllocationCallbacks,
170)>;
171
172pub type PFN_vkMapMemory = Option<unsafe extern "C" fn(
173 device: VkDevice,
174 memory: VkDeviceMemory,
175 offset: VkDeviceSize,
176 size: VkDeviceSize,
177 flags: VkMemoryMapFlags,
178 ppData: *mut *mut c_void,
179) -> VkResult>;
180
181pub type PFN_vkUnmapMemory = Option<unsafe extern "C" fn(
182 device: VkDevice,
183 memory: VkDeviceMemory,
184)>;
185
186pub type PFN_vkCreateBuffer = Option<unsafe extern "C" fn(
188 device: VkDevice,
189 pCreateInfo: *const VkBufferCreateInfo,
190 pAllocator: *const VkAllocationCallbacks,
191 pBuffer: *mut VkBuffer,
192) -> VkResult>;
193
194pub type PFN_vkDestroyBuffer = Option<unsafe extern "C" fn(
195 device: VkDevice,
196 buffer: VkBuffer,
197 pAllocator: *const VkAllocationCallbacks,
198)>;
199
200pub type PFN_vkGetBufferMemoryRequirements = Option<unsafe extern "C" fn(
201 device: VkDevice,
202 buffer: VkBuffer,
203 pMemoryRequirements: *mut VkMemoryRequirements,
204)>;
205
206pub type PFN_vkBindBufferMemory = Option<unsafe extern "C" fn(
207 device: VkDevice,
208 buffer: VkBuffer,
209 memory: VkDeviceMemory,
210 memoryOffset: VkDeviceSize,
211) -> VkResult>;
212
213pub type PFN_vkCreateCommandPool = Option<unsafe extern "C" fn(
215 device: VkDevice,
216 pCreateInfo: *const VkCommandPoolCreateInfo,
217 pAllocator: *const VkAllocationCallbacks,
218 pCommandPool: *mut VkCommandPool,
219) -> VkResult>;
220
221pub type PFN_vkDestroyCommandPool = Option<unsafe extern "C" fn(
222 device: VkDevice,
223 commandPool: VkCommandPool,
224 pAllocator: *const VkAllocationCallbacks,
225)>;
226
227pub type PFN_vkAllocateCommandBuffers = Option<unsafe extern "C" fn(
228 device: VkDevice,
229 pAllocateInfo: *const VkCommandBufferAllocateInfo,
230 pCommandBuffers: *mut VkCommandBuffer,
231) -> VkResult>;
232
233pub type PFN_vkFreeCommandBuffers = Option<unsafe extern "C" fn(
234 device: VkDevice,
235 commandPool: VkCommandPool,
236 commandBufferCount: u32,
237 pCommandBuffers: *const VkCommandBuffer,
238)>;
239
240pub type PFN_vkBeginCommandBuffer = Option<unsafe extern "C" fn(
241 commandBuffer: VkCommandBuffer,
242 pBeginInfo: *const VkCommandBufferBeginInfo,
243) -> VkResult>;
244
245pub type PFN_vkEndCommandBuffer = Option<unsafe extern "C" fn(
246 commandBuffer: VkCommandBuffer,
247) -> VkResult>;
248
249pub type PFN_vkCmdCopyBuffer = Option<unsafe extern "C" fn(
251 commandBuffer: VkCommandBuffer,
252 srcBuffer: VkBuffer,
253 dstBuffer: VkBuffer,
254 regionCount: u32,
255 pRegions: *const VkBufferCopy,
256)>;
257
258pub type PFN_vkCmdPipelineBarrier = Option<unsafe extern "C" fn(
259 commandBuffer: VkCommandBuffer,
260 srcStageMask: VkPipelineStageFlags,
261 dstStageMask: VkPipelineStageFlags,
262 dependencyFlags: VkDependencyFlags,
263 memoryBarrierCount: u32,
264 pMemoryBarriers: *const VkMemoryBarrier,
265 bufferMemoryBarrierCount: u32,
266 pBufferMemoryBarriers: *const VkBufferMemoryBarrier,
267 imageMemoryBarrierCount: u32,
268 pImageMemoryBarriers: *const c_void, )>;
270
271pub type PFN_vkCmdBindPipeline = Option<unsafe extern "C" fn(
272 commandBuffer: VkCommandBuffer,
273 pipelineBindPoint: VkPipelineBindPoint,
274 pipeline: VkPipeline,
275)>;
276
277pub type PFN_vkCmdBindDescriptorSets = Option<unsafe extern "C" fn(
278 commandBuffer: VkCommandBuffer,
279 pipelineBindPoint: VkPipelineBindPoint,
280 layout: VkPipelineLayout,
281 firstSet: u32,
282 descriptorSetCount: u32,
283 pDescriptorSets: *const VkDescriptorSet,
284 dynamicOffsetCount: u32,
285 pDynamicOffsets: *const u32,
286)>;
287
288pub type PFN_vkCmdDispatch = Option<unsafe extern "C" fn(
289 commandBuffer: VkCommandBuffer,
290 groupCountX: u32,
291 groupCountY: u32,
292 groupCountZ: u32,
293)>;
294
295pub type PFN_vkCreateFence = Option<unsafe extern "C" fn(
297 device: VkDevice,
298 pCreateInfo: *const VkFenceCreateInfo,
299 pAllocator: *const VkAllocationCallbacks,
300 pFence: *mut VkFence,
301) -> VkResult>;
302
303pub type PFN_vkDestroyFence = Option<unsafe extern "C" fn(
304 device: VkDevice,
305 fence: VkFence,
306 pAllocator: *const VkAllocationCallbacks,
307)>;
308
309pub type PFN_vkResetFences = Option<unsafe extern "C" fn(
310 device: VkDevice,
311 fenceCount: u32,
312 pFences: *const VkFence,
313) -> VkResult>;
314
315pub type PFN_vkGetFenceStatus = Option<unsafe extern "C" fn(
316 device: VkDevice,
317 fence: VkFence,
318) -> VkResult>;
319
320pub type PFN_vkWaitForFences = Option<unsafe extern "C" fn(
321 device: VkDevice,
322 fenceCount: u32,
323 pFences: *const VkFence,
324 waitAll: VkBool32,
325 timeout: u64,
326) -> VkResult>;
327
328pub type PFN_vkCreateSemaphore = Option<unsafe extern "C" fn(
329 device: VkDevice,
330 pCreateInfo: *const VkSemaphoreCreateInfo,
331 pAllocator: *const VkAllocationCallbacks,
332 pSemaphore: *mut VkSemaphore,
333) -> VkResult>;
334
335pub type PFN_vkDestroySemaphore = Option<unsafe extern "C" fn(
336 device: VkDevice,
337 semaphore: VkSemaphore,
338 pAllocator: *const VkAllocationCallbacks,
339)>;
340
341pub type PFN_vkCreateEvent = Option<unsafe extern "C" fn(
342 device: VkDevice,
343 pCreateInfo: *const VkEventCreateInfo,
344 pAllocator: *const VkAllocationCallbacks,
345 pEvent: *mut VkEvent,
346) -> VkResult>;
347
348pub type PFN_vkDestroyEvent = Option<unsafe extern "C" fn(
349 device: VkDevice,
350 event: VkEvent,
351 pAllocator: *const VkAllocationCallbacks,
352)>;
353
354pub type PFN_vkGetEventStatus = Option<unsafe extern "C" fn(
355 device: VkDevice,
356 event: VkEvent,
357) -> VkResult>;
358
359pub type PFN_vkSetEvent = Option<unsafe extern "C" fn(
360 device: VkDevice,
361 event: VkEvent,
362) -> VkResult>;
363
364pub type PFN_vkResetEvent = Option<unsafe extern "C" fn(
365 device: VkDevice,
366 event: VkEvent,
367) -> VkResult>;
368
369pub type PFN_vkCmdSetEvent = Option<unsafe extern "C" fn(
370 commandBuffer: VkCommandBuffer,
371 event: VkEvent,
372 stageMask: VkPipelineStageFlags,
373)>;
374
375pub type PFN_vkCmdResetEvent = Option<unsafe extern "C" fn(
376 commandBuffer: VkCommandBuffer,
377 event: VkEvent,
378 stageMask: VkPipelineStageFlags,
379)>;
380
381pub type PFN_vkCmdWaitEvents = Option<unsafe extern "C" fn(
382 commandBuffer: VkCommandBuffer,
383 eventCount: u32,
384 pEvents: *const VkEvent,
385 srcStageMask: VkPipelineStageFlags,
386 dstStageMask: VkPipelineStageFlags,
387 memoryBarrierCount: u32,
388 pMemoryBarriers: *const VkMemoryBarrier,
389 bufferMemoryBarrierCount: u32,
390 pBufferMemoryBarriers: *const VkBufferMemoryBarrier,
391 imageMemoryBarrierCount: u32,
392 pImageMemoryBarriers: *const c_void,
393)>;
394
395pub type PFN_vkCmdDispatchIndirect = Option<unsafe extern "C" fn(
396 commandBuffer: VkCommandBuffer,
397 buffer: VkBuffer,
398 offset: VkDeviceSize,
399)>;
400
401pub type PFN_vkCreateShaderModule = Option<unsafe extern "C" fn(
403 device: VkDevice,
404 pCreateInfo: *const VkShaderModuleCreateInfo,
405 pAllocator: *const VkAllocationCallbacks,
406 pShaderModule: *mut VkShaderModule,
407) -> VkResult>;
408
409pub type PFN_vkDestroyShaderModule = Option<unsafe extern "C" fn(
410 device: VkDevice,
411 shaderModule: VkShaderModule,
412 pAllocator: *const VkAllocationCallbacks,
413)>;
414
415pub type PFN_vkCreateComputePipelines = Option<unsafe extern "C" fn(
416 device: VkDevice,
417 pipelineCache: VkPipelineCache,
418 createInfoCount: u32,
419 pCreateInfos: *const VkComputePipelineCreateInfo,
420 pAllocator: *const VkAllocationCallbacks,
421 pPipelines: *mut VkPipeline,
422) -> VkResult>;
423
424pub type PFN_vkDestroyPipeline = Option<unsafe extern "C" fn(
425 device: VkDevice,
426 pipeline: VkPipeline,
427 pAllocator: *const VkAllocationCallbacks,
428)>;
429
430pub type PFN_vkCreatePipelineLayout = Option<unsafe extern "C" fn(
431 device: VkDevice,
432 pCreateInfo: *const VkPipelineLayoutCreateInfo,
433 pAllocator: *const VkAllocationCallbacks,
434 pPipelineLayout: *mut VkPipelineLayout,
435) -> VkResult>;
436
437pub type PFN_vkDestroyPipelineLayout = Option<unsafe extern "C" fn(
438 device: VkDevice,
439 pipelineLayout: VkPipelineLayout,
440 pAllocator: *const VkAllocationCallbacks,
441)>;
442
443pub type PFN_vkCreateDescriptorSetLayout = Option<unsafe extern "C" fn(
445 device: VkDevice,
446 pCreateInfo: *const VkDescriptorSetLayoutCreateInfo,
447 pAllocator: *const VkAllocationCallbacks,
448 pSetLayout: *mut VkDescriptorSetLayout,
449) -> VkResult>;
450
451pub type PFN_vkDestroyDescriptorSetLayout = Option<unsafe extern "C" fn(
452 device: VkDevice,
453 descriptorSetLayout: VkDescriptorSetLayout,
454 pAllocator: *const VkAllocationCallbacks,
455)>;
456
457pub type PFN_vkCreateDescriptorPool = Option<unsafe extern "C" fn(
458 device: VkDevice,
459 pCreateInfo: *const VkDescriptorPoolCreateInfo,
460 pAllocator: *const VkAllocationCallbacks,
461 pDescriptorPool: *mut VkDescriptorPool,
462) -> VkResult>;
463
464pub type PFN_vkDestroyDescriptorPool = Option<unsafe extern "C" fn(
465 device: VkDevice,
466 descriptorPool: VkDescriptorPool,
467 pAllocator: *const VkAllocationCallbacks,
468)>;
469
470pub type PFN_vkAllocateDescriptorSets = Option<unsafe extern "C" fn(
471 device: VkDevice,
472 pAllocateInfo: *const VkDescriptorSetAllocateInfo,
473 pDescriptorSets: *mut VkDescriptorSet,
474) -> VkResult>;
475
476pub type PFN_vkUpdateDescriptorSets = Option<unsafe extern "C" fn(
477 device: VkDevice,
478 descriptorWriteCount: u32,
479 pDescriptorWrites: *const VkWriteDescriptorSet,
480 descriptorCopyCount: u32,
481 pDescriptorCopies: *const VkCopyDescriptorSet,
482)>;