diff --git a/ash/src/extensions/ios_surface.rs b/ash/src/extensions/ios_surface.rs new file mode 100644 index 0000000..2e4bd45 --- /dev/null +++ b/ash/src/extensions/ios_surface.rs @@ -0,0 +1,53 @@ +#![allow(dead_code)] +use prelude::*; +use std::mem; +use vk; +use std::ffi::CStr; +use RawPtr; +use version::{EntryV1_0, InstanceV1_0}; + +#[derive(Clone)] +pub struct IOSSurface { + handle: vk::Instance, + ios_surface_fn: vk::IOSSurfaceFn, +} + +impl IOSSurface { + pub fn new( + entry: &E, + instance: &I, + ) -> Result> { + let surface_fn = vk::IOSSurfaceFn::load(|name| unsafe { + mem::transmute(entry.get_instance_proc_addr( + instance.handle(), + name.as_ptr(), + )) + })?; + Ok(IOSSurface { + handle: instance.handle(), + ios_surface_fn: surface_fn, + }) + } + + pub fn name() -> &'static CStr { + CStr::from_bytes_with_nul(b"VK_MVK_IOS_surface\0").expect("Wrong extension string") + } + + pub unsafe fn create_ios_surface_mvk( + &self, + create_info: &vk::IOSSurfaceCreateInfoMVK, + allocation_callbacks: Option<&vk::AllocationCallbacks>, + ) -> VkResult { + let mut surface = mem::uninitialized(); + let err_code = self.ios_surface_fn.create_ios_surface_mvk( + self.handle, + create_info, + allocation_callbacks.as_raw_ptr(), + &mut surface, + ); + match err_code { + vk::Result::Success => Ok(surface), + _ => Err(err_code), + } + } +} diff --git a/ash/src/extensions/macos_surface.rs b/ash/src/extensions/macos_surface.rs new file mode 100644 index 0000000..92a1bbc --- /dev/null +++ b/ash/src/extensions/macos_surface.rs @@ -0,0 +1,53 @@ +#![allow(dead_code)] +use prelude::*; +use std::mem; +use vk; +use std::ffi::CStr; +use RawPtr; +use version::{EntryV1_0, InstanceV1_0}; + +#[derive(Clone)] +pub struct MacOSSurface { + handle: vk::Instance, + macos_surface_fn: vk::MacOSSurfaceFn, +} + +impl MacOSSurface { + pub fn new( + entry: &E, + instance: &I, + ) -> Result> { + let surface_fn = vk::MacOSSurfaceFn::load(|name| unsafe { + mem::transmute(entry.get_instance_proc_addr( + instance.handle(), + name.as_ptr(), + )) + })?; + Ok(MacOSSurface { + handle: instance.handle(), + macos_surface_fn: surface_fn, + }) + } + + pub fn name() -> &'static CStr { + CStr::from_bytes_with_nul(b"VK_MVK_macos_surface\0").expect("Wrong extension string") + } + + pub unsafe fn create_macos_surface_mvk( + &self, + create_info: &vk::MacOSSurfaceCreateInfoMVK, + allocation_callbacks: Option<&vk::AllocationCallbacks>, + ) -> VkResult { + let mut surface = mem::uninitialized(); + let err_code = self.macos_surface_fn.create_macos_surface_mvk( + self.handle, + create_info, + allocation_callbacks.as_raw_ptr(), + &mut surface, + ); + match err_code { + vk::Result::Success => Ok(surface), + _ => Err(err_code), + } + } +} diff --git a/ash/src/extensions/mod.rs b/ash/src/extensions/mod.rs index 761b363..b95213e 100644 --- a/ash/src/extensions/mod.rs +++ b/ash/src/extensions/mod.rs @@ -8,6 +8,8 @@ pub use self::mir_surface::MirSurface; pub use self::xcb_surface::XcbSurface; pub use self::wayland_surface::WaylandSurface; pub use self::android_surface::AndroidSurface; +pub use self::macos_surface::MacOSSurface; +pub use self::ios_surface::IOSSurface; mod swapchain; mod display_swapchain; @@ -19,3 +21,5 @@ mod mir_surface; mod android_surface; mod wayland_surface; mod xcb_surface; +mod macos_surface; +mod ios_surface;