Module vulkanalia::chain
source · Expand description
Pointer chain handling.
§Input Pointer Chains
Input pointer chains are singly linked lists of Vulkan structs that
implement vk::InputChainStruct
such as vk::InstanceCreateInfo
. These
pointer chains are used to provide input data to Vulkan commands. A pointer
in such a chain can be represented with InputChainPtr
and can be easily
iterated over using input_chain
.
§Example
// Build an input pointer chain.
let mut features = vk::ValidationFeaturesEXT::default();
let mut flags = vk::ValidationFlagsEXT::default();
let info = vk::InstanceCreateInfo::builder()
.push_next(&mut features)
.push_next(&mut flags)
.build();
// Iterate over the input pointer chain.
let structs = unsafe { input_chain(info.next) }.collect::<Vec<_>>();
assert_eq!(structs.len(), 2);
// Inspect the pointers in the input pointer chain.
let base = unsafe { structs[0].as_base_ref() };
assert_eq!(base.s_type, vk::StructureType::VALIDATION_FLAGS_EXT);
let full = unsafe { structs[0].as_ref::<vk::ValidationFlagsEXT>() };
assert_eq!(full, &flags);
let base = unsafe { structs[1].as_base_ref() };
assert_eq!(base.s_type, vk::StructureType::VALIDATION_FEATURES_EXT);
let full = unsafe { structs[1].as_ref::<vk::ValidationFeaturesEXT>() };
assert_eq!(full, &features);
§Output Pointer Chain
Output pointer chains are singly linked lists of Vulkan structs that
implement vk::OutputChainStruct
such as vk::PhysicalDeviceFeatures2
.
These pointer chains are used by Vulkan to provide output data to the
application. A pointer in such a chain can be represented with
OutputChainPtr
and can be easily iterated over using output_chain
.
§Example
// Call a command that populates an output pointer chain.
let mut features_11 = vk::PhysicalDeviceVulkan11Features::default();
let mut features_12 = vk::PhysicalDeviceVulkan12Features::default();
let mut features = vk::PhysicalDeviceFeatures2::builder()
.push_next(&mut features_11)
.push_next(&mut features_12);
unsafe { instance.get_physical_device_features2_khr(physical_device, &mut features) };
// Iterate over the pointers in the output pointer chain.
let structs = unsafe { output_chain(features.next) }.collect::<Vec<_>>();
assert_eq!(structs.len(), 2);
// Inspect the pointers in the output pointer chain.
let base = unsafe { structs[0].as_base_ref() };
assert_eq!(base.s_type, vk::StructureType::PHYSICAL_DEVICE_VULKAN_1_2_FEATURES);
let full = unsafe { structs[0].as_ref::<vk::PhysicalDeviceVulkan12Features>() };
assert_eq!(full.descriptor_indexing, 1);
let base = unsafe { structs[1].as_base_ref() };
assert_eq!(base.s_type, vk::StructureType::PHYSICAL_DEVICE_VULKAN_1_1_FEATURES);
let full = unsafe { structs[1].as_ref::<vk::PhysicalDeviceVulkan11Features>() };
assert_eq!(full.protected_memory, 1);
Structs§
- A non-null pointer in a Vulkan input pointer chain.
- A non-null pointer in a Vulkan output pointer chain.
Functions§
- Creates an iterator over a Vulkan input pointer chain.
- Creates an iterator over a Vulkan output pointer chain.