pub const Registry = struct { copyright: []const u8, decls: []Declaration, api_constants: []ApiConstant, tags: []Tag, features: []Feature, extensions: []Extension, }; pub const Declaration = struct { name: []const u8, decl_type: DeclarationType, }; pub const DeclarationType = union(enum) { container: Container, enumeration: Enum, bitmask: Bitmask, handle: Handle, command: Command, alias: Alias, foreign: Foreign, typedef: TypeInfo, external, }; pub const Alias = struct { pub const Target = enum { other_command, other_type, }; name: []const u8, target: Target, }; pub const ApiConstant = struct { pub const Value = union(enum) { expr: []const u8, version: [4][]const u8, }; name: []const u8, value: Value, }; pub const Tag = struct { name: []const u8, author: []const u8, }; pub const TypeInfo = union(enum) { name: []const u8, command_ptr: Command, pointer: Pointer, array: Array, }; pub const Container = struct { pub const Field = struct { name: []const u8, field_type: TypeInfo, bits: ?usize, is_buffer_len: bool, }; stype: ?[]const u8, fields: []Field, is_union: bool, }; pub const Enum = struct { pub const Value = union(enum) { bitpos: u6, // 1 << bitpos bit_vector: i32, // Combined flags & some vendor IDs int: i32, alias: struct { name: []const u8, is_compat_alias: bool, }, }; pub const Field = struct { name: []const u8, value: Value, }; fields: []Field, bitwidth: u8, is_bitmask: bool, }; pub const Bitmask = struct { bits_enum: ?[]const u8, bitwidth: u8, }; pub const Handle = struct { parent: ?[]const u8, // VkInstance has no parent is_dispatchable: bool, }; pub const Command = struct { pub const Param = struct { name: []const u8, param_type: TypeInfo, is_buffer_len: bool, }; params: []Param, return_type: *TypeInfo, success_codes: [][]const u8, error_codes: [][]const u8, }; pub const Pointer = struct { pub const PointerSize = union(enum) { one, many, // The length is given by some complex expression, possibly involving another field other_field: []const u8, // The length is given by some other field or parameter zero_terminated, }; is_const: bool, is_optional: bool, size: PointerSize, child: *TypeInfo, }; pub const Array = struct { pub const ArraySize = union(enum) { int: usize, alias: []const u8, // Field size is given by an api constant }; size: ArraySize, child: *TypeInfo, }; pub const Foreign = struct { depends: []const u8, // Either a header or vk_platform }; pub const Feature = struct { name: []const u8, level: FeatureLevel, // from 'number' requires: []Require, }; pub const Extension = struct { pub const ExtensionType = enum { instance, device, }; pub const Promotion = union(enum) { none, feature: FeatureLevel, extension: []const u8, }; name: []const u8, number: u31, version: u32, extension_type: ?ExtensionType, depends: []const []const u8, // Other extensions promoted_to: Promotion, platform: ?[]const u8, required_feature_level: ?FeatureLevel, requires: []Require, }; pub const Require = struct { pub const EnumExtension = struct { extends: []const u8, extnumber: ?u31, field: Enum.Field, }; extends: []EnumExtension, types: []const []const u8, commands: []const []const u8, required_feature_level: ?FeatureLevel, required_extension: ?[]const u8, }; pub const FeatureLevel = struct { major: u32, minor: u32, };