spirv_bindings: remove the IntoFfi/FromFfi stuff
This commit is contained in:
@@ -1,67 +1,4 @@
|
||||
use coremem_types::compound::Optional;
|
||||
use coremem_types::vec::{Vec3, Vec3u};
|
||||
|
||||
/// hide the actual spirv backend structures inside a submodule to make their use/boundary clear.
|
||||
mod ffi {
|
||||
pub use spirv_backend::entry_points;
|
||||
}
|
||||
|
||||
// conversion traits for types defined cross-lib
|
||||
pub trait IntoFfi {
|
||||
type Ffi;
|
||||
fn into_ffi(self) -> Self::Ffi;
|
||||
}
|
||||
|
||||
pub trait IntoLib {
|
||||
type Lib;
|
||||
fn into_lib(self) -> Self::Lib;
|
||||
}
|
||||
|
||||
pub trait Identity { }
|
||||
impl<T: Identity> IntoFfi for T {
|
||||
type Ffi = Self;
|
||||
fn into_ffi(self) -> Self::Ffi {
|
||||
self
|
||||
}
|
||||
}
|
||||
impl<T: Identity> IntoLib for T {
|
||||
type Lib = Self;
|
||||
fn into_lib(self) -> Self::Lib {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Identity for f32 {}
|
||||
impl<'a> Identity for &'a str {}
|
||||
impl<T0: Identity, T1: Identity> Identity for (T0, T1) {}
|
||||
impl Identity for Vec3u {}
|
||||
impl<T: Identity> Identity for Vec3<T> {}
|
||||
|
||||
impl<L: IntoFfi> IntoFfi for Option<L>
|
||||
where L::Ffi: Default
|
||||
{
|
||||
type Ffi = Optional<L::Ffi>;
|
||||
fn into_ffi(self) -> Self::Ffi {
|
||||
match self {
|
||||
Some(s) => Optional::some(s.into_ffi()),
|
||||
None => Optional::none(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<F: Copy + IntoLib> IntoLib for Optional<F> {
|
||||
type Lib = Option<F::Lib>;
|
||||
fn into_lib(self) -> Self::Lib {
|
||||
if self.is_some() {
|
||||
Some(self.unwrap().into_lib())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION BINDINGS
|
||||
pub fn entry_points<L: 'static>() -> Option<(&'static str, &'static str)>
|
||||
{
|
||||
ffi::entry_points::<L>().into_lib()
|
||||
spirv_backend::entry_points::<L>().into()
|
||||
}
|
||||
|
@@ -84,4 +84,13 @@ impl<T0: Default, T1: Default> Optional<(T0, T1)> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Into<Option<T>> for Optional<T> {
|
||||
fn into(self) -> Option<T> {
|
||||
if self.present != 0 {
|
||||
Some(self.unwrap())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user