#![allow(non_snake_case)]
#[derive(Debug)]
#[non_exhaustive]
pub enum FatalError {
MissingRegistryElement,
IoError(std::io::Error),
}
impl From<std::io::Error> for FatalError {
fn from(v: std::io::Error) -> FatalError {
FatalError::IoError(v)
}
}
#[derive(Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum Error {
UnexpectedElement {
xpath: String,
name: String,
},
UnexpectedAttribute {
xpath: String,
name: String,
}, UnexpectedAttributeValue {
xpath: String,
name: String,
value: String,
},
MissingElement {
xpath: String,
name: String,
},
MissingAttribute {
xpath: String,
name: String,
},
SchemaViolation {
xpath: String,
desc: String,
},
ParseIntError {
xpath: String,
text: String,
error: std::num::ParseIntError,
},
Internal {
desc: &'static str,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub struct Registry(pub Vec<RegistryChild>);
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum RegistryChild {
Comment(String),
VendorIds(VendorIds),
Platforms(Platforms),
Tags(Tags),
Types(Types),
Enums(Enums),
Commands(Commands),
Feature(Feature),
Extensions(Extensions),
Formats(Formats),
SpirvExtensions(SpirvExtensions),
SpirvCapabilities(SpirvCapabilities),
Sync(Sync),
}
pub type VendorIds = CommentedChildren<VendorId>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct VendorId {
pub name: String,
pub id: u32,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
}
pub type Platforms = CommentedChildren<Platform>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Platform {
pub name: String,
pub protect: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
}
pub type Tags = CommentedChildren<Tag>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Tag {
pub name: String,
pub author: String,
pub contact: String,
}
pub type Types = CommentedChildren<TypesChild>;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum TypesChild {
Type(Type),
Comment(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Type {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub alias: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub category: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub parent: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub returnedonly: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub structextends: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub allowduplicate: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub objtypeenum: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub bitvalues: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub spec: TypeSpec,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub deprecated: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum TypeSpec {
None,
Code(TypeCode),
Members(Vec<TypeMember>),
}
impl Default for TypeSpec {
fn default() -> Self {
TypeSpec::None
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct TypeCode {
pub code: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub markup: Vec<TypeCodeMarkup>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum TypeCodeMarkup {
Name(String),
Type(String),
ApiEntry(String),
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum TypeMember {
Comment(String),
Definition(TypeMemberDefinition),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct TypeMemberDefinition {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub len: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub altlen: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub externsync: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub optional: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub selector: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub selection: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub noautovalidity: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub validextensionstructs: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub values: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub limittype: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub objecttype: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub deprecated: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub code: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub markup: Vec<TypeMemberMarkup>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum TypeMemberMarkup {
Name(String),
Type(String),
Enum(String),
Comment(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Enums {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub kind: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub start: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub end: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub vendor: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub children: Vec<EnumsChild>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub bitwidth: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum EnumsChild {
Enum(Enum),
Unused(Unused),
Comment(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Unused {
pub start: i64,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub end: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub vendor: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Enum {
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub type_suffix: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub protect: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub deprecated: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub spec: EnumSpec,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum EnumSpec {
None,
Alias {
alias: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: Option<String>,
},
Offset {
offset: i64,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extnumber: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
dir: bool,
},
Bitpos {
bitpos: i64,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: Option<String>,
},
Value {
value: String, #[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extends: Option<String>,
},
}
impl Default for EnumSpec {
fn default() -> Self {
EnumSpec::None
}
}
pub type Commands = CommentedChildren<Command>;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum Command {
Alias { name: String, alias: String },
Definition(CommandDefinition),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct CommandDefinition {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub tasks: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub queues: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub successcodes: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub errorcodes: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub renderpass: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub videocoding: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub cmdbufferlevel: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub pipeline: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub proto: NameWithType,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub params: Vec<CommandParam>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub alias: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub description: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub implicitexternsyncparams: Vec<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub code: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct CommandParam {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub len: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub altlen: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub externsync: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub optional: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub noautovalidity: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub objecttype: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub definition: NameWithType,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub validstructs: Vec<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub stride: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Feature {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub api: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub number: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub protect: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub children: Vec<FeatureChild>,
}
pub type FeatureChild = ExtensionChild;
pub type Extensions = CommentedChildren<Extension>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Extension {
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub number: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub protect: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub platform: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub author: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub contact: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub ext_type: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires_core: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub supported: Option<String>, #[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub ratified: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub deprecatedby: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub promotedto: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub obsoletedby: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub provisional: bool,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub specialuse: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub sortorder: Option<i64>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub depends: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub children: Vec<ExtensionChild>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum ExtensionChild {
Require {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
profile: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
extension: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
feature: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
depends: Option<String>,
items: Vec<InterfaceItem>,
},
Remove {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
api: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
profile: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
items: Vec<InterfaceItem>,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum InterfaceItem {
Comment(String),
Type {
name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
},
Enum(Enum),
Command {
name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
comment: Option<String>,
},
}
pub type Formats = CommentedChildren<Format>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct Format {
pub name: String,
pub class: String,
pub blockSize: u8,
pub texelsPerBlock: u8,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub blockExtent: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub packed: Option<u8>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub compressed: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub chroma: Option<String>,
pub children: Vec<FormatChild>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum FormatChild {
#[non_exhaustive]
Component {
name: String,
bits: String,
numericFormat: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
planeIndex: Option<u8>,
},
#[non_exhaustive]
Plane {
index: u8,
widthDivisor: u8,
heightDivisor: u8,
compatible: String,
},
#[non_exhaustive]
SpirvImageFormat { name: String },
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct NameWithType {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub type_name: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub code: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct CommentedChildren<T> {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub comment: Option<String>,
pub children: Vec<T>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct SpirvExtOrCap {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub name: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub enables: Vec<Enable>,
}
pub type SpirvExtension = SpirvExtOrCap;
pub type SpirvExtensions = CommentedChildren<SpirvExtension>;
pub type SpirvCapability = SpirvExtOrCap;
pub type SpirvCapabilities = CommentedChildren<SpirvCapability>;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum SyncChild {
Stage(SyncStage),
Access(SyncAccess),
Pipeline(SyncPipeline),
}
pub type Sync = CommentedChildren<SyncChild>;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct SyncSupport {
pub queues: Option<String>,
pub stage: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct SyncEquivalent {
pub stage: Option<String>,
pub access: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct SyncStage {
pub name: String,
pub alias: Option<String>,
pub syncsupport: Option<SyncSupport>,
pub syncequivalent: Option<SyncEquivalent>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct SyncAccess {
pub name: String,
pub alias: Option<String>,
pub comment: Option<String>,
pub syncsupport: Option<SyncSupport>,
pub syncequivalent: Option<SyncEquivalent>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct SyncPipeline {
pub order: Option<String>,
pub before: Option<String>,
pub after: Option<String>,
pub text: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub enum Enable {
Version(String),
Extension(String),
Feature(FeatureEnable),
Property(PropertyEnable),
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct FeatureEnable {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub struct_: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub feature: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires: Option<String>,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub alias: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
#[non_exhaustive]
pub struct PropertyEnable {
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub property: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub member: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub value: String,
#[cfg_attr(
feature = "serialize",
serde(default, skip_serializing_if = "is_default")
)]
pub requires: Option<String>,
}
#[cfg(feature = "serialize")]
fn is_default<T: Default + Eq>(v: &T) -> bool {
v.eq(&T::default())
}