generator: Exclude static macro code (macros.rs
) from the generator (#552)
Much like `platform_types.rs` and `vk.rs` before, there is no need to generate this file as its contents are completely static. This allows direct editing of the file without realizing that a copy lives in the generator - and will overwrite `macros.rs` when the generator is being run.
This commit is contained in:
parent
570b554894
commit
405449901c
1 changed files with 0 additions and 203 deletions
|
@ -132,197 +132,6 @@ fn khronos_link<S: Display + ?Sized>(name: &S) -> Literal {
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn define_handle_macro() -> TokenStream {
|
|
||||||
quote! {
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! define_handle{
|
|
||||||
($name: ident, $ty: ident) => {
|
|
||||||
define_handle!($name, $ty, doc = "");
|
|
||||||
};
|
|
||||||
($name: ident, $ty: ident, $doc_link: meta) => {
|
|
||||||
#[repr(transparent)]
|
|
||||||
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Hash)]
|
|
||||||
#[$doc_link]
|
|
||||||
pub struct $name(*mut u8);
|
|
||||||
impl Default for $name {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self::null()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Handle for $name {
|
|
||||||
const TYPE: ObjectType = ObjectType::$ty;
|
|
||||||
fn as_raw(self) -> u64 { self.0 as u64 }
|
|
||||||
fn from_raw(x: u64) -> Self { Self(x as _) }
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe impl Send for $name {}
|
|
||||||
unsafe impl Sync for $name {}
|
|
||||||
|
|
||||||
impl $name {
|
|
||||||
pub const fn null() -> Self {
|
|
||||||
Self(::std::ptr::null_mut())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Pointer for $name {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
fmt::Pointer::fmt(&self.0, f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Debug for $name {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
fmt::Debug::fmt(&self.0, f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn handle_nondispatchable_macro() -> TokenStream {
|
|
||||||
quote! {
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! handle_nondispatchable {
|
|
||||||
($name: ident, $ty: ident) => {
|
|
||||||
handle_nondispatchable!($name, $ty, doc = "");
|
|
||||||
};
|
|
||||||
($name: ident, $ty: ident, $doc_link: meta) => {
|
|
||||||
#[repr(transparent)]
|
|
||||||
#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Copy, Hash, Default)]
|
|
||||||
#[$doc_link]
|
|
||||||
pub struct $name(u64);
|
|
||||||
|
|
||||||
impl Handle for $name {
|
|
||||||
const TYPE: ObjectType = ObjectType::$ty;
|
|
||||||
fn as_raw(self) -> u64 { self.0 as u64 }
|
|
||||||
fn from_raw(x: u64) -> Self { Self(x as _) }
|
|
||||||
}
|
|
||||||
|
|
||||||
impl $name{
|
|
||||||
pub const fn null() -> Self {
|
|
||||||
Self(0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Pointer for $name {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
write!(f, "0x{:x}", self.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Debug for $name {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
write!(f, "0x{:x}", self.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pub fn vk_bitflags_wrapped_macro() -> TokenStream {
|
|
||||||
quote! {
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! vk_bitflags_wrapped {
|
|
||||||
($name: ident, $flag_type: ty) => {
|
|
||||||
|
|
||||||
impl Default for $name {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self(0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl $name {
|
|
||||||
#[inline]
|
|
||||||
pub const fn empty() -> Self {
|
|
||||||
Self(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub const fn from_raw(x: $flag_type) -> Self { Self(x) }
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub const fn as_raw(self) -> $flag_type { self.0 }
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn is_empty(self) -> bool {
|
|
||||||
self == Self::empty()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn intersects(self, other: Self) -> bool {
|
|
||||||
self & other != Self::empty()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns whether `other` is a subset of `self`
|
|
||||||
#[inline]
|
|
||||||
pub fn contains(self, other: Self) -> bool {
|
|
||||||
self & other == other
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::BitOr for $name {
|
|
||||||
type Output = Self;
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn bitor(self, rhs: Self) -> Self {
|
|
||||||
Self(self.0 | rhs.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::BitOrAssign for $name {
|
|
||||||
#[inline]
|
|
||||||
fn bitor_assign(&mut self, rhs: Self) {
|
|
||||||
*self = *self | rhs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::BitAnd for $name {
|
|
||||||
type Output = Self;
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn bitand(self, rhs: Self) -> Self {
|
|
||||||
Self(self.0 & rhs.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::BitAndAssign for $name {
|
|
||||||
#[inline]
|
|
||||||
fn bitand_assign(&mut self, rhs: Self) {
|
|
||||||
*self = *self & rhs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::BitXor for $name {
|
|
||||||
type Output = Self;
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn bitxor(self, rhs: Self) -> Self {
|
|
||||||
Self(self.0 ^ rhs.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::BitXorAssign for $name {
|
|
||||||
#[inline]
|
|
||||||
fn bitxor_assign(&mut self, rhs: Self) {
|
|
||||||
*self = *self ^ rhs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::Not for $name {
|
|
||||||
type Output = Self;
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn not(self) -> Self {
|
|
||||||
Self(!self.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn is_opaque_type(ty: &str) -> bool {
|
fn is_opaque_type(ty: &str) -> bool {
|
||||||
matches!(
|
matches!(
|
||||||
ty,
|
ty,
|
||||||
|
@ -2731,22 +2540,11 @@ pub fn write_source_code<P: AsRef<Path>>(vk_headers_dir: &Path, src_dir: P) {
|
||||||
extras: const_debugs,
|
extras: const_debugs,
|
||||||
} = generate_const_debugs(&const_values);
|
} = generate_const_debugs(&const_values);
|
||||||
|
|
||||||
let bitflags_macro = vk_bitflags_wrapped_macro();
|
|
||||||
let handle_nondispatchable_macro = handle_nondispatchable_macro();
|
|
||||||
let define_handle_macro = define_handle_macro();
|
|
||||||
|
|
||||||
let macros_code = quote! {
|
|
||||||
#bitflags_macro
|
|
||||||
#handle_nondispatchable_macro
|
|
||||||
#define_handle_macro
|
|
||||||
};
|
|
||||||
|
|
||||||
let src_dir = src_dir.as_ref();
|
let src_dir = src_dir.as_ref();
|
||||||
|
|
||||||
let vk_dir = src_dir.join("vk");
|
let vk_dir = src_dir.join("vk");
|
||||||
std::fs::create_dir_all(&vk_dir).expect("failed to create vk dir");
|
std::fs::create_dir_all(&vk_dir).expect("failed to create vk dir");
|
||||||
|
|
||||||
let mut vk_macros_file = File::create(vk_dir.join("macros.rs")).expect("vk/macros.rs");
|
|
||||||
let mut vk_features_file = File::create(vk_dir.join("features.rs")).expect("vk/features.rs");
|
let mut vk_features_file = File::create(vk_dir.join("features.rs")).expect("vk/features.rs");
|
||||||
let mut vk_definitions_file =
|
let mut vk_definitions_file =
|
||||||
File::create(vk_dir.join("definitions.rs")).expect("vk/definitions.rs");
|
File::create(vk_dir.join("definitions.rs")).expect("vk/definitions.rs");
|
||||||
|
@ -2831,7 +2629,6 @@ pub fn write_source_code<P: AsRef<Path>>(vk_headers_dir: &Path, src_dir: P) {
|
||||||
#(#aliases)*
|
#(#aliases)*
|
||||||
};
|
};
|
||||||
|
|
||||||
write!(&mut vk_macros_file, "{}", macros_code).expect("Unable to write vk/macros.rs");
|
|
||||||
write!(&mut vk_features_file, "{}", feature_code).expect("Unable to write vk/features.rs");
|
write!(&mut vk_features_file, "{}", feature_code).expect("Unable to write vk/features.rs");
|
||||||
write!(&mut vk_definitions_file, "{}", definition_code)
|
write!(&mut vk_definitions_file, "{}", definition_code)
|
||||||
.expect("Unable to write vk/definitions.rs");
|
.expect("Unable to write vk/definitions.rs");
|
||||||
|
|
Loading…
Add table
Reference in a new issue