VulkanSpec
Going from the XML to the IR is fairly independent of the code generation process, and has been isolated into its own module (VulkanSpec).
VulkanSpec.EXTENSION_SUPPORT_DISABLED
VulkanSpec.EXTENSION_SUPPORT_VULKAN
VulkanSpec.EXTENSION_SUPPORT_VULKAN_SC
VulkanSpec.Authors
VulkanSpec.Bitmasks
VulkanSpec.CapabilitiesSPIRV
VulkanSpec.Constants
VulkanSpec.Constructors
VulkanSpec.CreateFunc
VulkanSpec.DestroyFunc
VulkanSpec.Destructors
VulkanSpec.Enums
VulkanSpec.ExtensionSupport
VulkanSpec.Extensions
VulkanSpec.ExtensionsSPIRV
VulkanSpec.FieldIterator
VulkanSpec.Flags
VulkanSpec.FunctionType
VulkanSpec.Functions
VulkanSpec.Handles
VulkanSpec.PARAM_REQUIREMENT
VulkanSpec.QueueType
VulkanSpec.RenderPassOutside
VulkanSpec.RenderPassRequirement
VulkanSpec.Spec
VulkanSpec.SpecAlias
VulkanSpec.SpecBit
VulkanSpec.SpecBitmask
VulkanSpec.SpecConstant
VulkanSpec.SpecEnum
VulkanSpec.SpecFlag
VulkanSpec.SpecFunc
VulkanSpec.SpecFuncParam
VulkanSpec.SpecHandle
VulkanSpec.SpecPlatform
VulkanSpec.SpecStruct
VulkanSpec.SpecStructMember
VulkanSpec.SpecUnion
VulkanSpec.StructType
VulkanSpec.Structs
VulkanSpec.Unions
VulkanSpec.arglen
VulkanSpec.hasalias
VulkanSpec.is_inferable_length
VulkanSpec.is_length_exception
VulkanSpec.isalias
VulkanSpec.isenabled
VulkanSpec.len
VulkanSpec.translate_c_type
VulkanSpec.EXTENSION_SUPPORT_DISABLED
— ConstantDisabled.
VulkanSpec.EXTENSION_SUPPORT_VULKAN
— ConstantStandard Vulkan.
VulkanSpec.EXTENSION_SUPPORT_VULKAN_SC
— ConstantVulkan SC, for safety-critical systems.
VulkanSpec.Authors
— TypeSpecification authors.
struct Authors <: VulkanSpec.Collection{AuthorTag}
data::StructArrays.StructVector{AuthorTag, NamedTuple{(:tag, :author), Tuple{Vector{String}, Vector{String}}}, Int64}
VulkanSpec.Bitmasks
— TypeAPI bitmasks.
struct Bitmasks <: VulkanSpec.Collection{SpecBitmask}
data::StructArrays.StructVector{SpecBitmask, NamedTuple{(:name, :bits, :combinations, :width), Tuple{Vector{Symbol}, Vector{StructArrays.StructVector{SpecBit}}, Vector{StructArrays.StructVector{SpecBitCombination}}, Vector{Integer}}}, Int64}
VulkanSpec.CapabilitiesSPIRV
— TypeSPIR-V capabilities.
struct CapabilitiesSPIRV <: VulkanSpec.Collection{VulkanSpec.SpecCapabilitySPIRV}
data::StructArrays.StructVector{VulkanSpec.SpecCapabilitySPIRV, NamedTuple{(:name, :promoted_to, :enabling_extensions, :enabling_features, :enabling_properties), Tuple{Vector{Symbol}, Vector{Union{Nothing, VersionNumber}}, Vector{Vector{String}}, Vector{Vector{VulkanSpec.FeatureCondition}}, Vector{Vector{VulkanSpec.PropertyCondition}}}}, Int64}
VulkanSpec.Constants
— TypeAPI constants, usually defined in C with #define.
struct Constants <: VulkanSpec.Collection{SpecConstant}
data::StructArrays.StructVector{SpecConstant, NamedTuple{(:name, :value), Tuple{Vector{Symbol}, Vector{Any}}}, Int64}
VulkanSpec.Constructors
— TypeAPI handle constructors.
struct Constructors <: VulkanSpec.Collection{CreateFunc}
data::StructArrays.StructVector{CreateFunc, NamedTuple{(:func, :handle, :create_info_struct, :create_info_param, :batch), Tuple{Vector{SpecFunc}, Vector{SpecHandle}, Vector{Union{Nothing, SpecStruct}}, Vector{Union{Nothing, SpecFuncParam}}, Vector{Bool}}}, Int64}
VulkanSpec.CreateFunc
— TypeFunction func
that creates a handle
from a create info structure create_info_struct
passed as the value of the parameter create_info_param
.
If batch
is true, then func
expects a list of multiple create info structures and will create multiple handles at once.
struct CreateFunc <: Spec
func::SpecFunc
handle::SpecHandle
create_info_struct::Union{Nothing, SpecStruct}
create_info_param::Union{Nothing, SpecFuncParam}
batch::Bool
VulkanSpec.DestroyFunc
— TypeFunction func
that destroys a handle
passed as the value of the parameter destroyed_param
.
If batch
is true, then func
expects a list of multiple handles and will destroy all of them at once.
struct DestroyFunc <: Spec
func::SpecFunc
handle::SpecHandle
destroyed_param::SpecFuncParam
batch::Bool
VulkanSpec.Destructors
— TypeAPI handle destructors.
struct Destructors <: VulkanSpec.Collection{DestroyFunc}
data::StructArrays.StructVector{DestroyFunc, NamedTuple{(:func, :handle, :destroyed_param, :batch), Tuple{Vector{SpecFunc}, Vector{SpecHandle}, Vector{SpecFuncParam}, Vector{Bool}}}, Int64}
VulkanSpec.Enums
— TypeAPI enumerated values, excluding bitmasks.
struct Enums <: VulkanSpec.Collection{SpecEnum}
data::StructArrays.StructVector{SpecEnum, NamedTuple{(:name, :enums), Tuple{Vector{Symbol}, Vector{StructArrays.StructVector{SpecConstant}}}}, Int64}
VulkanSpec.ExtensionSupport
— TypeDescribes what type of support an extension has per the specification.
struct ExtensionSupport <: BitMask{UInt32}
val::UInt32
VulkanSpec.Extensions
— TypeAPI extensions.
struct Extensions <: VulkanSpec.Collection{SpecExtension}
data::StructArrays.StructVector{SpecExtension, NamedTuple{(:name, :type, :requirements, :support, :author, :symbols, :platform, :is_provisional, :promoted_to, :deprecated_by), Tuple{Vector{String}, Vector{VulkanSpec.ExtensionType}, Vector{Vector{String}}, Vector{VulkanSpec.ExtensionSupport}, Vector{Union{Nothing, String}}, Vector{Vector{Symbol}}, Vector{PlatformType}, Vector{Bool}, Vector{Union{Nothing, VersionNumber, String}}, Vector{Union{Nothing, String}}}}, Int64}
VulkanSpec.ExtensionsSPIRV
— TypeSPIR-V extensions.
struct ExtensionsSPIRV <: VulkanSpec.Collection{VulkanSpec.SpecExtensionSPIRV}
data::StructArrays.StructVector{VulkanSpec.SpecExtensionSPIRV, NamedTuple{(:name, :promoted_to, :enabling_extensions), Tuple{Vector{String}, Vector{Union{Nothing, VersionNumber}}, Vector{Vector{String}}}}, Int64}
VulkanSpec.FieldIterator
— TypeIterate through function or struct specification fields from a list of fields. list
is a sequence of fields to get through from root
.
struct FieldIterator
root::Union{SpecFuncParam, SpecStructMember}
list::Vector{Symbol}
structs::Structs
VulkanSpec.Flags
— TypeAPI flags.
struct Flags <: VulkanSpec.Collection{SpecFlag}
data::StructArrays.StructVector{SpecFlag, NamedTuple{(:name, :typealias, :bitmask), Tuple{Vector{Symbol}, Vector{Symbol}, Vector{Union{Nothing, SpecBitmask}}}}, Int64}
VulkanSpec.FunctionType
— TypeFunction type classification.
Types:
FTYPE_CREATE
: constructor (functions that begin withvkCreate
).FTYPE_DESTROY
: destructor (functions that begin withvkDestroy
).FTYPE_ALLOCATE
: allocator (functions that begin withvkAllocate
).FTYPE_FREE
: deallocator (functions that begin withvkFree
).FTYPE_COMMAND
: Vulkan command (functions that begin withvkCmd
).FTYPE_QUERY
: used to query parameters, returned directly or indirectly through pointer mutation (typically, functions that begin withvkEnumerate
andvkGet
, but not all of them and possibly others).FTYPE_OTHER
: no identified type.
primitive type FunctionType <: Enum{Int32} 32
VulkanSpec.Functions
— TypeAPI functions.
struct Functions <: VulkanSpec.Collection{SpecFunc}
data::StructArrays.StructVector{SpecFunc, NamedTuple{(:name, :type, :return_type, :render_pass_compatibility, :queue_compatibility, :params, :success_codes, :error_codes), Tuple{Vector{Symbol}, Vector{FunctionType}, Vector{Union{Nothing, Expr, Symbol}}, Vector{Vector{RenderPassRequirement}}, Vector{Vector{QueueType}}, Vector{StructArrays.StructVector{SpecFuncParam}}, Vector{Vector{Symbol}}, Vector{Vector{Symbol}}}}, Int64}
VulkanSpec.Handles
— TypeAPI handle types.
struct Handles <: VulkanSpec.Collection{SpecHandle}
data::StructArrays.StructVector{SpecHandle, NamedTuple{(:name, :parent, :is_dispatchable), Tuple{Vector{Symbol}, Vector{Union{Nothing, Symbol}}, Vector{Bool}}}, Int64}
VulkanSpec.PARAM_REQUIREMENT
— TypeParameter requirement. Applies both to struct members and function parameters.
Requirement types:
OPTIONAL
: may have its default zero (or nullptr) value, acting as a sentinel value (similar toNothing
in Julia).REQUIRED
: must be provided, no sentinel value is allowed.POINTER_OPTIONAL
: is a pointer which may be null, but must have valid elements if provided.POINTER_REQUIRED
: must be a valid pointer, but its elements are optional (e.g. are allowed to be sentinel values).POINTER_FULLY_OPTIONAL
: may be null, or a pointer with optional elements (e.g. are allowed to be sentinel values).
primitive type PARAM_REQUIREMENT <: Enum{Int32} 32
VulkanSpec.QueueType
— TypeQueue type on which a computation can be carried.
abstract type QueueType
VulkanSpec.RenderPassOutside
— TypeThe command can be executed outside a render pass.
struct RenderPassOutside <: RenderPassRequirement
VulkanSpec.RenderPassRequirement
— TypeRender pass execution specification for commands.
abstract type RenderPassRequirement
VulkanSpec.Spec
— TypeEverything that a Vulkan specification can apply to: data structures, functions, parameters...
abstract type Spec
VulkanSpec.SpecAlias
— TypeSpecification for an alias of the form const <name> = <alias>
.
struct SpecAlias{S<:Spec} <: Spec
name::Symbol
: Name of the new alias.alias::Spec
: Aliased specification element.
VulkanSpec.SpecBit
— TypeSpecification for a bit used in a bitmask.
struct SpecBit <: Spec
name::Symbol
: Name of the bit.position::Int64
: Position of the bit.
VulkanSpec.SpecBitmask
— TypeSpecification for a bitmask type that must be formed through a combination of bits
.
Is usually an alias for a UInt32
type which carries meaning through its bits.
struct SpecBitmask <: Spec
name::Symbol
: Name of the bitmask type.bits::StructArrays.StructVector{SpecBit}
: Valid bits that can be combined to form the final bitmask value.combinations::StructArrays.StructVector{SpecBitCombination}
width::Integer
VulkanSpec.SpecConstant
— TypeSpecification for a constant.
struct SpecConstant <: Spec
name::Symbol
: Name of the constant.value::Any
: Value of the constant.
VulkanSpec.SpecEnum
— TypeSpecification for an enumeration type.
struct SpecEnum <: Spec
name::Symbol
: Name of the enumeration type.enums::StructArrays.StructVector{SpecConstant}
: Vector of possible enumeration values.
VulkanSpec.SpecFlag
— TypeSpecification for a flag type name
that is a type alias of typealias
. Can be associated with a bitmask structure, in which case the bitmask
number is set to the corresponding SpecBitmask
.
struct SpecFlag <: Spec
name::Symbol
: Name of the flag type.typealias::Symbol
: The type it aliases.bitmask::Union{Nothing, SpecBitmask}
: Bitmask, if applicable.
VulkanSpec.SpecFunc
— TypeSpecification for a function.
struct SpecFunc <: Spec
name::Symbol
: Name of the function.type::FunctionType
:FunctionType
classification.return_type::Union{Nothing, Expr, Symbol}
: Return type (void ifNothing
).render_pass_compatibility::Vector{RenderPassRequirement}
: Whether the function can be executed inside a render pass, outside, or both. Empty if not specified, in which case it is equivalent to both inside and outside.queue_compatibility::Vector{QueueType}
: Type of queues on which the function can be executed. Empty if not specified, in which case it is equivalent to being executable on all queues.params::StructArrays.StructVector{SpecFuncParam}
: Function parameters.success_codes::Vector{Symbol}
error_codes::Vector{Symbol}
VulkanSpec.SpecFuncParam
— TypeSpecification for a function parameter.
struct SpecFuncParam <: Spec
parent::Any
: Name of the parent function.name::Symbol
: Identifier.type::Union{Expr, Symbol}
: Expression of its idiomatic Julia type.is_constant::Bool
: If constant, cannot be mutated by Vulkan functions.is_externsync::Bool
: Whether it must be externally synchronized before calling the function.requirement::PARAM_REQUIREMENT
:PARAM_REQUIREMENT
classification.len::Union{Nothing, Expr, Symbol}
: Name of the parameter (of the same function) which represents its length.Nothing
for non-vector types. Can be an expression of a parameter.arglen::Vector{Symbol}
: Name of the parameters (of the same function) it is a length of.autovalidity::Bool
: Whether automatic validity documentation is enabled. If false, this means that the parameter may be an exception to at least one Vulkan convention.
VulkanSpec.SpecHandle
— TypeSpecification for handle types.
A handle may possess a parent. In this case, the handle can only be valid if its parent is valid.
Some handles are dispatchable, which means that they are represented as opaque pointers. Non-dispatchable handles are 64-bit integer types, and may encode information directly into their value.
struct SpecHandle <: Spec
name::Symbol
: Name of the handle type.parent::Union{Nothing, Symbol}
: Name of the parent handle, if any.is_dispatchable::Bool
: Whether the handle is dispatchable or not.
VulkanSpec.SpecPlatform
— TypeAPI platforms.
struct SpecPlatform <: Spec
type::PlatformType
description::String
VulkanSpec.SpecStruct
— TypeSpecification for a structure.
struct SpecStruct <: Spec
name::Symbol
: Name of the structure.type::StructType
:StructType
classification.is_returnedonly::Bool
: Whether the structure is only meant to be filled in by Vulkan functions, as opposed to being constructed by the user.Note that the API may still request the user to provide an initialized structure, notably as part of
pNext
chains for queries.
extends::Vector{Symbol}
: Name of the structures it extends, usually done through the original structures'pNext
argument.members::StructArrays.StructVector{SpecStructMember}
: Structure members.
VulkanSpec.SpecStructMember
— TypeSpecification for a structure parameter.
struct SpecStructMember <: Spec
parent::Any
: Name of the parent structure.name::Symbol
: Identifier.type::Union{Expr, Symbol}
: Expression of its idiomatic Julia type.is_constant::Bool
: If constant, cannot be mutated by Vulkan functions.is_externsync::Bool
: Whether it must be externally synchronized before calling any function which uses the parent structure.requirement::PARAM_REQUIREMENT
:PARAM_REQUIREMENT
classification.len::Union{Nothing, Expr, Symbol}
: Name of the member (of the same structure) which represents its length.Nothing
for non-vector types.arglen::Vector{Union{Expr, Symbol}}
: Name of the members (of the same structure) it is a length of.autovalidity::Bool
: Whether automatic validity documentation is enabled. If false, this means that the member may be an exception to at least one Vulkan convention.
VulkanSpec.SpecUnion
— TypeSpecification for a union type.
struct SpecUnion <: Spec
name::Symbol
: Name of the union type.types::Vector{Union{Expr, Symbol}}
: Possible types for the union.fields::Vector{Symbol}
: Fields which cast the struct into the union typesselectors::Vector{Symbol}
: Selector values, if any, to determine the type of the union in a given context (function call for example).is_returnedonly::Bool
: Whether the structure is only meant to be filled in by Vulkan functions, as opposed to being constructed by the user.Note that the API may still request the user to provide an initialized structure, notably as part of
pNext
chains for queries.
VulkanSpec.StructType
— TypeStructure type classification.
Types:
STYPE_CREATE_INFO
: holds constructor parameters (structures that end withCreateInfo
).STYPE_ALLOCATE_INFO
: holds allocator parameters (structures that end withAllocateInfo
).STYPE_GENERIC_INFO
: holds parameters for another function or structure (structures that end withInfo
, excluding those falling into the previous types).STYPE_DATA
: usually represents user or Vulkan data.STYPE_PROPERTY
: is a property returned by Vulkan in areturnedonly
structure, usually done throughFTYPE_QUERY
type functions.
primitive type StructType <: Enum{Int32} 32
VulkanSpec.Structs
— TypeAPI structure types.
struct Structs <: VulkanSpec.Collection{SpecStruct}
data::StructArrays.StructVector{SpecStruct, NamedTuple{(:name, :type, :is_returnedonly, :extends, :members), Tuple{Vector{Symbol}, Vector{StructType}, Vector{Bool}, Vector{Vector{Symbol}}, Vector{StructArrays.StructVector{SpecStructMember}}}}, Int64}
VulkanSpec.Unions
— TypeAPI union types.
struct Unions <: VulkanSpec.Collection{SpecUnion}
data::StructArrays.StructVector{SpecUnion, NamedTuple{(:name, :types, :fields, :selectors, :is_returnedonly), Tuple{Vector{Symbol}, Vector{Vector{Union{Expr, Symbol}}}, Vector{Vector{Symbol}}, Vector{Vector{Symbol}}, Vector{Bool}}}, Int64}
VulkanSpec.arglen
— Functionarglen(queueCount)
Return the function parameters or struct members whose length is encoded by the provided argument.
VulkanSpec.hasalias
— MethodWhether an alias was built from this name.
hasalias(
name,
aliases::VulkanSpec.Aliases
) -> Union{Missing, Bool}
VulkanSpec.is_inferable_length
— MethodTrue if the argument that can be inferred from other arguments.
is_inferable_length(spec::SpecStructMember) -> Bool
VulkanSpec.is_length_exception
— MethodTrue if the argument behaves differently than other length parameters, and requires special care.
is_length_exception(spec::SpecStructMember) -> Bool
VulkanSpec.isalias
— MethodWhether this type is an alias for another name.
isalias(name, aliases::VulkanSpec.Aliases) -> Bool
VulkanSpec.isenabled
— MethodReturn whether an extension is enabled for standard Vulkan - that is, a given symbol x
is either core or is from an extension that has not been disabled, or is not exclusive to Vulkan SC.
isenabled(x, extensions::Extensions) -> Any
VulkanSpec.len
— Functionlen(pCode)
Return the function parameter or struct member which describes the length of the provided pointer argument. When the length is more complex than a simple argument, i.e. is a function of another parameter, missing
is returned. In this case, refer to the .len
field of the argument to get the correct Expr
.
VulkanSpec.translate_c_type
— MethodSemantically translate C types to their Julia counterpart. Note that since it is a semantic translation, translated types do not necessarily have the same layout, e.g. VkBool32 => Bool (8 bits).
translate_c_type(ctype) -> Any