70 lines
1.8 KiB
Rust
70 lines
1.8 KiB
Rust
#![allow(non_camel_case_types)]
|
|
|
|
use std::{mem, ptr};
|
|
use vulkan_rs::prelude::*;
|
|
|
|
use super::*;
|
|
|
|
pub use VkLayerFunction::*;
|
|
pub use VkNegotiateLayerStructType::*;
|
|
|
|
#[derive(Clone)]
|
|
pub enum VkNegotiateLayerStructType {
|
|
LAYER_NEGOTIATE_INTERFACE_STRUCT = 1,
|
|
}
|
|
|
|
#[allow(unused)]
|
|
#[derive(Clone, Copy, Eq, PartialEq)]
|
|
pub enum VkLayerFunction {
|
|
VK_LAYER_LINK_INFO = 0,
|
|
VK_LOADER_DATA_CALLBACK = 1,
|
|
VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2,
|
|
VK_LOADER_FEATURES = 3,
|
|
}
|
|
|
|
macro_rules! create_functions_enum {
|
|
($([$pfn:ident, $func:ident],)+) => {
|
|
paste::paste! {
|
|
pub enum Functions {
|
|
Null,
|
|
$(
|
|
$pfn ( [<PFN_vk $pfn>] ),
|
|
)+
|
|
}
|
|
|
|
impl Functions {
|
|
pub fn convert(self) -> PFN_vkVoidFunction {
|
|
match self {
|
|
Functions::Null => unsafe {
|
|
mem::transmute::<*const (), PFN_vkVoidFunction>(ptr::null())
|
|
},
|
|
$(
|
|
Functions::$pfn(foo) => unsafe { mem::transmute(foo) },
|
|
)+
|
|
}
|
|
}
|
|
|
|
pub fn get_vk_func(s:&str) -> Option<Functions> {
|
|
match s {
|
|
$(
|
|
stringify!([<vk $pfn>]) => Some(Functions::$pfn($func)),
|
|
)+
|
|
|
|
_ => None
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
}
|
|
|
|
create_functions_enum!(
|
|
[CreateInstance, create_instance],
|
|
[DestroyInstance, destroy_instance],
|
|
[CreateDevice, create_device],
|
|
[DestroyDevice, destroy_device],
|
|
[CreateSwapchainKHR, create_swapchain],
|
|
[AcquireNextImageKHR, acquire_next_image],
|
|
[QueuePresentKHR, present_queue],
|
|
);
|