use crate::{
self as vk, StructureType,
load::{CallError, feature::Features},
};
pub(super) fn capture_base(
value: &vk::PhysicalDeviceFeatures,
features: &mut Features,
) -> Result<(), CallError> {
features.record(
StructureType::PHYSICAL_DEVICE_FEATURES_2,
&[
("robustBufferAccess", value.robust_buffer_access),
("fullDrawIndexUint32", value.full_draw_index_uint32),
("imageCubeArray", value.image_cube_array),
("independentBlend", value.independent_blend),
("geometryShader", value.geometry_shader),
("tessellationShader", value.tessellation_shader),
("sampleRateShading", value.sample_rate_shading),
("dualSrcBlend", value.dual_src_blend),
("logicOp", value.logic_op),
("multiDrawIndirect", value.multi_draw_indirect),
(
"drawIndirectFirstInstance",
value.draw_indirect_first_instance,
),
("depthClamp", value.depth_clamp),
("depthBiasClamp", value.depth_bias_clamp),
("fillModeNonSolid", value.fill_mode_non_solid),
("depthBounds", value.depth_bounds),
("wideLines", value.wide_lines),
("largePoints", value.large_points),
("alphaToOne", value.alpha_to_one),
("multiViewport", value.multi_viewport),
("samplerAnisotropy", value.sampler_anisotropy),
("textureCompressionETC2", value.texture_compression_etc2),
(
"textureCompressionASTC_LDR",
value.texture_compression_astc_ldr,
),
("textureCompressionBC", value.texture_compression_bc),
("occlusionQueryPrecise", value.occlusion_query_precise),
("pipelineStatisticsQuery", value.pipeline_statistics_query),
(
"vertexPipelineStoresAndAtomics",
value.vertex_pipeline_stores_and_atomics,
),
(
"fragmentStoresAndAtomics",
value.fragment_stores_and_atomics,
),
(
"shaderTessellationAndGeometryPointSize",
value.shader_tessellation_and_geometry_point_size,
),
(
"shaderImageGatherExtended",
value.shader_image_gather_extended,
),
(
"shaderStorageImageExtendedFormats",
value.shader_storage_image_extended_formats,
),
(
"shaderStorageImageMultisample",
value.shader_storage_image_multisample,
),
(
"shaderStorageImageReadWithoutFormat",
value.shader_storage_image_read_without_format,
),
(
"shaderStorageImageWriteWithoutFormat",
value.shader_storage_image_write_without_format,
),
(
"shaderUniformBufferArrayDynamicIndexing",
value.shader_uniform_buffer_array_dynamic_indexing,
),
(
"shaderSampledImageArrayDynamicIndexing",
value.shader_sampled_image_array_dynamic_indexing,
),
(
"shaderStorageBufferArrayDynamicIndexing",
value.shader_storage_buffer_array_dynamic_indexing,
),
(
"shaderStorageImageArrayDynamicIndexing",
value.shader_storage_image_array_dynamic_indexing,
),
("shaderClipDistance", value.shader_clip_distance),
("shaderCullDistance", value.shader_cull_distance),
("shaderFloat64", value.shader_float64),
("shaderInt64", value.shader_int64),
("shaderInt16", value.shader_int16),
("shaderResourceResidency", value.shader_resource_residency),
("shaderResourceMinLod", value.shader_resource_min_lod),
("sparseBinding", value.sparse_binding),
("sparseResidencyBuffer", value.sparse_residency_buffer),
("sparseResidencyImage2D", value.sparse_residency_image2_d),
("sparseResidencyImage3D", value.sparse_residency_image3_d),
("sparseResidency2Samples", value.sparse_residency2_samples),
("sparseResidency4Samples", value.sparse_residency4_samples),
("sparseResidency8Samples", value.sparse_residency8_samples),
("sparseResidency16Samples", value.sparse_residency16_samples),
("sparseResidencyAliased", value.sparse_residency_aliased),
("variableMultisampleRate", value.variable_multisample_rate),
("inheritedQueries", value.inherited_queries),
],
)
}
pub(super) unsafe fn capture_node(
node: *const vk::BaseInStructure,
features: &mut Features,
) -> Result<bool, CallError> {
match unsafe { (*node).s_type } {
StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV,
&[("deviceGeneratedCommands", value.device_generated_commands)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PUSH_CONSTANT_BANK_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePushConstantBankFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_PUSH_CONSTANT_BANK_FEATURES_NV,
&[("pushConstantBank", value.push_constant_bank)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV,
&[
("deviceGeneratedCompute", value.device_generated_compute),
(
"deviceGeneratedComputePipelines",
value.device_generated_compute_pipelines,
),
(
"deviceGeneratedComputeCaptureReplay",
value.device_generated_compute_capture_replay,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePrivateDataFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES,
&[("privateData", value.private_data)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRIVATE_DATA_BASE_HANDLE_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePrivateDataBaseHandleFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRIVATE_DATA_BASE_HANDLE_FEATURES_NV,
&[("privateDataBaseHandle", value.private_data_base_handle)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceClusterAccelerationStructureFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV,
&[(
"clusterAccelerationStructure",
value.cluster_acceleration_structure,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FEATURES_2 => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFeatures2>() };
capture_base(&value.features, features)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVariablePointersFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
&[
(
"variablePointersStorageBuffer",
value.variable_pointers_storage_buffer,
),
("variablePointers", value.variable_pointers),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MULTIVIEW_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMultiviewFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
&[
("multiview", value.multiview),
("multiviewGeometryShader", value.multiview_geometry_shader),
(
"multiviewTessellationShader",
value.multiview_tessellation_shader,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePresentIdFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR,
&[("presentId", value.present_id)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePresentId2FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR,
&[("presentId2", value.present_id2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePresentWaitFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR,
&[("presentWait", value.present_wait)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePresentWait2FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR,
&[("presentWait2", value.present_wait2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePresentTimingFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT,
&[
("presentTiming", value.present_timing),
("presentAtAbsoluteTime", value.present_at_absolute_time),
("presentAtRelativeTime", value.present_at_relative_time),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDevice16BitStorageFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
&[
(
"storageBuffer16BitAccess",
value.storage_buffer16_bit_access,
),
(
"uniformAndStorageBuffer16BitAccess",
value.uniform_and_storage_buffer16_bit_access,
),
("storagePushConstant16", value.storage_push_constant16),
("storageInputOutput16", value.storage_input_output16),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderSubgroupExtendedTypesFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
&[(
"shaderSubgroupExtendedTypes",
value.shader_subgroup_extended_types,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSamplerYcbcrConversionFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,
&[("samplerYcbcrConversion", value.sampler_ycbcr_conversion)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceProtectedMemoryFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES,
&[("protectedMemory", value.protected_memory)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceBlendOperationAdvancedFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT,
&[(
"advancedBlendCoherentOperations",
value.advanced_blend_coherent_operations,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMultiDrawFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT,
&[("multiDraw", value.multi_draw)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceInlineUniformBlockFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES,
&[
("inlineUniformBlock", value.inline_uniform_block),
(
"descriptorBindingInlineUniformBlockUpdateAfterBind",
value.descriptor_binding_inline_uniform_block_update_after_bind,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance4Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES,
&[("maintenance4", value.maintenance4)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance5Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES,
&[("maintenance5", value.maintenance5)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance6Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES,
&[("maintenance6", value.maintenance6)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance7FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR,
&[("maintenance7", value.maintenance7)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance8FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR,
&[("maintenance8", value.maintenance8)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance9FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR,
&[("maintenance9", value.maintenance9)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_11_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance11FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_11_FEATURES_KHR,
&[("maintenance11", value.maintenance11)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMaintenance10FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAINTENANCE_10_FEATURES_KHR,
&[("maintenance10", value.maintenance10)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderDrawParametersFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
&[("shaderDrawParameters", value.shader_draw_parameters)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderFloat16Int8Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
&[
("shaderFloat16", value.shader_float16),
("shaderInt8", value.shader_int8),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceHostQueryResetFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES,
&[("hostQueryReset", value.host_query_reset)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ELAPSED_TIMER_QUERY_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceElapsedTimerQueryFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_ELAPSED_TIMER_QUERY_FEATURES_QCOM,
&[("elapsedTimerQuery", value.elapsed_timer_query)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceGlobalPriorityQueryFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES,
&[("globalPriorityQuery", value.global_priority_query)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDeviceMemoryReportFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT,
&[("deviceMemoryReport", value.device_memory_report)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDescriptorIndexingFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
&[
(
"shaderInputAttachmentArrayDynamicIndexing",
value.shader_input_attachment_array_dynamic_indexing,
),
(
"shaderUniformTexelBufferArrayDynamicIndexing",
value.shader_uniform_texel_buffer_array_dynamic_indexing,
),
(
"shaderStorageTexelBufferArrayDynamicIndexing",
value.shader_storage_texel_buffer_array_dynamic_indexing,
),
(
"shaderUniformBufferArrayNonUniformIndexing",
value.shader_uniform_buffer_array_non_uniform_indexing,
),
(
"shaderSampledImageArrayNonUniformIndexing",
value.shader_sampled_image_array_non_uniform_indexing,
),
(
"shaderStorageBufferArrayNonUniformIndexing",
value.shader_storage_buffer_array_non_uniform_indexing,
),
(
"shaderStorageImageArrayNonUniformIndexing",
value.shader_storage_image_array_non_uniform_indexing,
),
(
"shaderInputAttachmentArrayNonUniformIndexing",
value.shader_input_attachment_array_non_uniform_indexing,
),
(
"shaderUniformTexelBufferArrayNonUniformIndexing",
value.shader_uniform_texel_buffer_array_non_uniform_indexing,
),
(
"shaderStorageTexelBufferArrayNonUniformIndexing",
value.shader_storage_texel_buffer_array_non_uniform_indexing,
),
(
"descriptorBindingUniformBufferUpdateAfterBind",
value.descriptor_binding_uniform_buffer_update_after_bind,
),
(
"descriptorBindingSampledImageUpdateAfterBind",
value.descriptor_binding_sampled_image_update_after_bind,
),
(
"descriptorBindingStorageImageUpdateAfterBind",
value.descriptor_binding_storage_image_update_after_bind,
),
(
"descriptorBindingStorageBufferUpdateAfterBind",
value.descriptor_binding_storage_buffer_update_after_bind,
),
(
"descriptorBindingUniformTexelBufferUpdateAfterBind",
value.descriptor_binding_uniform_texel_buffer_update_after_bind,
),
(
"descriptorBindingStorageTexelBufferUpdateAfterBind",
value.descriptor_binding_storage_texel_buffer_update_after_bind,
),
(
"descriptorBindingUpdateUnusedWhilePending",
value.descriptor_binding_update_unused_while_pending,
),
(
"descriptorBindingPartiallyBound",
value.descriptor_binding_partially_bound,
),
(
"descriptorBindingVariableDescriptorCount",
value.descriptor_binding_variable_descriptor_count,
),
("runtimeDescriptorArray", value.runtime_descriptor_array),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTimelineSemaphoreFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
&[("timelineSemaphore", value.timeline_semaphore)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDevice8BitStorageFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
&[
("storageBuffer8BitAccess", value.storage_buffer8_bit_access),
(
"uniformAndStorageBuffer8BitAccess",
value.uniform_and_storage_buffer8_bit_access,
),
("storagePushConstant8", value.storage_push_constant8),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceConditionalRenderingFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT,
&[
("conditionalRendering", value.conditional_rendering),
(
"inheritedConditionalRendering",
value.inherited_conditional_rendering,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVulkanMemoryModelFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES,
&[
("vulkanMemoryModel", value.vulkan_memory_model),
(
"vulkanMemoryModelDeviceScope",
value.vulkan_memory_model_device_scope,
),
(
"vulkanMemoryModelAvailabilityVisibilityChains",
value.vulkan_memory_model_availability_visibility_chains,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderAtomicInt64Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES,
&[
(
"shaderBufferInt64Atomics",
value.shader_buffer_int64_atomics,
),
(
"shaderSharedInt64Atomics",
value.shader_shared_int64_atomics,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderAtomicFloatFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT,
&[
(
"shaderBufferFloat32Atomics",
value.shader_buffer_float32_atomics,
),
(
"shaderBufferFloat32AtomicAdd",
value.shader_buffer_float32_atomic_add,
),
(
"shaderBufferFloat64Atomics",
value.shader_buffer_float64_atomics,
),
(
"shaderBufferFloat64AtomicAdd",
value.shader_buffer_float64_atomic_add,
),
(
"shaderSharedFloat32Atomics",
value.shader_shared_float32_atomics,
),
(
"shaderSharedFloat32AtomicAdd",
value.shader_shared_float32_atomic_add,
),
(
"shaderSharedFloat64Atomics",
value.shader_shared_float64_atomics,
),
(
"shaderSharedFloat64AtomicAdd",
value.shader_shared_float64_atomic_add,
),
(
"shaderImageFloat32Atomics",
value.shader_image_float32_atomics,
),
(
"shaderImageFloat32AtomicAdd",
value.shader_image_float32_atomic_add,
),
(
"sparseImageFloat32Atomics",
value.sparse_image_float32_atomics,
),
(
"sparseImageFloat32AtomicAdd",
value.sparse_image_float32_atomic_add,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderAtomicFloat2FeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT,
&[
(
"shaderBufferFloat16Atomics",
value.shader_buffer_float16_atomics,
),
(
"shaderBufferFloat16AtomicAdd",
value.shader_buffer_float16_atomic_add,
),
(
"shaderBufferFloat16AtomicMinMax",
value.shader_buffer_float16_atomic_min_max,
),
(
"shaderBufferFloat32AtomicMinMax",
value.shader_buffer_float32_atomic_min_max,
),
(
"shaderBufferFloat64AtomicMinMax",
value.shader_buffer_float64_atomic_min_max,
),
(
"shaderSharedFloat16Atomics",
value.shader_shared_float16_atomics,
),
(
"shaderSharedFloat16AtomicAdd",
value.shader_shared_float16_atomic_add,
),
(
"shaderSharedFloat16AtomicMinMax",
value.shader_shared_float16_atomic_min_max,
),
(
"shaderSharedFloat32AtomicMinMax",
value.shader_shared_float32_atomic_min_max,
),
(
"shaderSharedFloat64AtomicMinMax",
value.shader_shared_float64_atomic_min_max,
),
(
"shaderImageFloat32AtomicMinMax",
value.shader_image_float32_atomic_min_max,
),
(
"sparseImageFloat32AtomicMinMax",
value.sparse_image_float32_atomic_min_max,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVertexAttributeDivisorFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES,
&[
(
"vertexAttributeInstanceRateDivisor",
value.vertex_attribute_instance_rate_divisor,
),
(
"vertexAttributeInstanceRateZeroDivisor",
value.vertex_attribute_instance_rate_zero_divisor,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceASTCDecodeFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT,
&[(
"decodeModeSharedExponent",
value.decode_mode_shared_exponent,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTransformFeedbackFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT,
&[
("transformFeedback", value.transform_feedback),
("geometryStreams", value.geometry_streams),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceRepresentativeFragmentTestFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV,
&[(
"representativeFragmentTest",
value.representative_fragment_test,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceExclusiveScissorFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV,
&[("exclusiveScissor", value.exclusive_scissor)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCornerSampledImageFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV,
&[("cornerSampledImage", value.corner_sampled_image)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceComputeShaderDerivativesFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR,
&[
(
"computeDerivativeGroupQuads",
value.compute_derivative_group_quads,
),
(
"computeDerivativeGroupLinear",
value.compute_derivative_group_linear,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderImageFootprintFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV,
&[("imageFootprint", value.image_footprint)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV,
&[(
"dedicatedAllocationImageAliasing",
value.dedicated_allocation_image_aliasing,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCopyMemoryIndirectFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_KHR,
&[
("indirectMemoryCopy", value.indirect_memory_copy),
(
"indirectMemoryToImageCopy",
value.indirect_memory_to_image_copy,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCopyMemoryIndirectFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV,
&[("indirectCopy", value.indirect_copy)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMemoryDecompressionFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_EXT,
&[("memoryDecompression", value.memory_decompression)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShadingRateImageFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV,
&[
("shadingRateImage", value.shading_rate_image),
(
"shadingRateCoarseSampleOrder",
value.shading_rate_coarse_sample_order,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceInvocationMaskFeaturesHUAWEI>() };
features.record(
StructureType::PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI,
&[("invocationMask", value.invocation_mask)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMeshShaderFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV,
&[
("taskShader", value.task_shader),
("meshShader", value.mesh_shader),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMeshShaderFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT,
&[
("taskShader", value.task_shader),
("meshShader", value.mesh_shader),
("multiviewMeshShader", value.multiview_mesh_shader),
(
"primitiveFragmentShadingRateMeshShader",
value.primitive_fragment_shading_rate_mesh_shader,
),
("meshShaderQueries", value.mesh_shader_queries),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceAccelerationStructureFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR,
&[
("accelerationStructure", value.acceleration_structure),
(
"accelerationStructureCaptureReplay",
value.acceleration_structure_capture_replay,
),
(
"accelerationStructureIndirectBuild",
value.acceleration_structure_indirect_build,
),
(
"accelerationStructureHostCommands",
value.acceleration_structure_host_commands,
),
(
"descriptorBindingAccelerationStructureUpdateAfterBind",
value.descriptor_binding_acceleration_structure_update_after_bind,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingPipelineFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR,
&[
("rayTracingPipeline", value.ray_tracing_pipeline),
(
"rayTracingPipelineShaderGroupHandleCaptureReplay",
value.ray_tracing_pipeline_shader_group_handle_capture_replay,
),
(
"rayTracingPipelineShaderGroupHandleCaptureReplayMixed",
value.ray_tracing_pipeline_shader_group_handle_capture_replay_mixed,
),
(
"rayTracingPipelineTraceRaysIndirect",
value.ray_tracing_pipeline_trace_rays_indirect,
),
(
"rayTraversalPrimitiveCulling",
value.ray_traversal_primitive_culling,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRayQueryFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR,
&[("rayQuery", value.ray_query)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingMaintenance1FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR,
&[
("rayTracingMaintenance1", value.ray_tracing_maintenance1),
(
"rayTracingPipelineTraceRaysIndirect2",
value.ray_tracing_pipeline_trace_rays_indirect2,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFragmentDensityMapFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT,
&[
("fragmentDensityMap", value.fragment_density_map),
(
"fragmentDensityMapDynamic",
value.fragment_density_map_dynamic,
),
(
"fragmentDensityMapNonSubsampledImages",
value.fragment_density_map_non_subsampled_images,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFragmentDensityMap2FeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT,
&[(
"fragmentDensityMapDeferred",
value.fragment_density_map_deferred,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT,
&[(
"fragmentDensityMapOffset",
value.fragment_density_map_offset,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceScalarBlockLayoutFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES,
&[("scalarBlockLayout", value.scalar_block_layout)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceUniformBufferStandardLayoutFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES,
&[(
"uniformBufferStandardLayout",
value.uniform_buffer_standard_layout,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDepthClipEnableFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT,
&[("depthClipEnable", value.depth_clip_enable)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMemoryPriorityFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT,
&[("memoryPriority", value.memory_priority)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT,
&[(
"pageableDeviceLocalMemory",
value.pageable_device_local_memory,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceBufferDeviceAddressFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES,
&[
("bufferDeviceAddress", value.buffer_device_address),
(
"bufferDeviceAddressCaptureReplay",
value.buffer_device_address_capture_replay,
),
(
"bufferDeviceAddressMultiDevice",
value.buffer_device_address_multi_device,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceBufferDeviceAddressFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT,
&[
("bufferDeviceAddress", value.buffer_device_address),
(
"bufferDeviceAddressCaptureReplay",
value.buffer_device_address_capture_replay,
),
(
"bufferDeviceAddressMultiDevice",
value.buffer_device_address_multi_device,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImagelessFramebufferFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES,
&[("imagelessFramebuffer", value.imageless_framebuffer)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTextureCompressionASTCHDRFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES,
&[(
"textureCompressionASTC_HDR",
value.texture_compression_astc_hdr,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeMatrixFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV,
&[
("cooperativeMatrix", value.cooperative_matrix),
(
"cooperativeMatrixRobustBufferAccess",
value.cooperative_matrix_robust_buffer_access,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceYcbcrImageArraysFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT,
&[("ycbcrImageArrays", value.ycbcr_image_arrays)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePresentBarrierFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV,
&[("presentBarrier", value.present_barrier)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePerformanceQueryFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR,
&[
(
"performanceCounterQueryPools",
value.performance_counter_query_pools,
),
(
"performanceCounterMultipleQueryPools",
value.performance_counter_multiple_query_pools,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCoverageReductionModeFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV,
&[("coverageReductionMode", value.coverage_reduction_mode)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL,
&[("shaderIntegerFunctions2", value.shader_integer_functions2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderClockFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR,
&[
("shaderSubgroupClock", value.shader_subgroup_clock),
("shaderDeviceClock", value.shader_device_clock),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceIndexTypeUint8Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES,
&[("indexTypeUint8", value.index_type_uint8)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderSMBuiltinsFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV,
&[("shaderSMBuiltins", value.shader_sm_builtins)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFragmentShaderInterlockFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT,
&[
(
"fragmentShaderSampleInterlock",
value.fragment_shader_sample_interlock,
),
(
"fragmentShaderPixelInterlock",
value.fragment_shader_pixel_interlock,
),
(
"fragmentShaderShadingRateInterlock",
value.fragment_shader_shading_rate_interlock,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSeparateDepthStencilLayoutsFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES,
&[(
"separateDepthStencilLayouts",
value.separate_depth_stencil_layouts,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT,
&[
(
"primitiveTopologyListRestart",
value.primitive_topology_list_restart,
),
(
"primitiveTopologyPatchListRestart",
value.primitive_topology_patch_list_restart,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR,
&[("pipelineExecutableInfo", value.pipeline_executable_info)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderDemoteToHelperInvocationFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES,
&[(
"shaderDemoteToHelperInvocation",
value.shader_demote_to_helper_invocation,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTexelBufferAlignmentFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT,
&[("texelBufferAlignment", value.texel_buffer_alignment)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSubgroupSizeControlFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES,
&[
("subgroupSizeControl", value.subgroup_size_control),
("computeFullSubgroups", value.compute_full_subgroups),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceLineRasterizationFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES,
&[
("rectangularLines", value.rectangular_lines),
("bresenhamLines", value.bresenham_lines),
("smoothLines", value.smooth_lines),
("stippledRectangularLines", value.stippled_rectangular_lines),
("stippledBresenhamLines", value.stippled_bresenham_lines),
("stippledSmoothLines", value.stippled_smooth_lines),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePipelineCreationCacheControlFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES,
&[(
"pipelineCreationCacheControl",
value.pipeline_creation_cache_control,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VULKAN_1_1_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVulkan11Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_VULKAN_1_1_FEATURES,
&[
(
"storageBuffer16BitAccess",
value.storage_buffer16_bit_access,
),
(
"uniformAndStorageBuffer16BitAccess",
value.uniform_and_storage_buffer16_bit_access,
),
("storagePushConstant16", value.storage_push_constant16),
("storageInputOutput16", value.storage_input_output16),
("multiview", value.multiview),
("multiviewGeometryShader", value.multiview_geometry_shader),
(
"multiviewTessellationShader",
value.multiview_tessellation_shader,
),
(
"variablePointersStorageBuffer",
value.variable_pointers_storage_buffer,
),
("variablePointers", value.variable_pointers),
("protectedMemory", value.protected_memory),
("samplerYcbcrConversion", value.sampler_ycbcr_conversion),
("shaderDrawParameters", value.shader_draw_parameters),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VULKAN_1_2_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVulkan12Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
&[
(
"samplerMirrorClampToEdge",
value.sampler_mirror_clamp_to_edge,
),
("drawIndirectCount", value.draw_indirect_count),
("storageBuffer8BitAccess", value.storage_buffer8_bit_access),
(
"uniformAndStorageBuffer8BitAccess",
value.uniform_and_storage_buffer8_bit_access,
),
("storagePushConstant8", value.storage_push_constant8),
(
"shaderBufferInt64Atomics",
value.shader_buffer_int64_atomics,
),
(
"shaderSharedInt64Atomics",
value.shader_shared_int64_atomics,
),
("shaderFloat16", value.shader_float16),
("shaderInt8", value.shader_int8),
("descriptorIndexing", value.descriptor_indexing),
(
"shaderInputAttachmentArrayDynamicIndexing",
value.shader_input_attachment_array_dynamic_indexing,
),
(
"shaderUniformTexelBufferArrayDynamicIndexing",
value.shader_uniform_texel_buffer_array_dynamic_indexing,
),
(
"shaderStorageTexelBufferArrayDynamicIndexing",
value.shader_storage_texel_buffer_array_dynamic_indexing,
),
(
"shaderUniformBufferArrayNonUniformIndexing",
value.shader_uniform_buffer_array_non_uniform_indexing,
),
(
"shaderSampledImageArrayNonUniformIndexing",
value.shader_sampled_image_array_non_uniform_indexing,
),
(
"shaderStorageBufferArrayNonUniformIndexing",
value.shader_storage_buffer_array_non_uniform_indexing,
),
(
"shaderStorageImageArrayNonUniformIndexing",
value.shader_storage_image_array_non_uniform_indexing,
),
(
"shaderInputAttachmentArrayNonUniformIndexing",
value.shader_input_attachment_array_non_uniform_indexing,
),
(
"shaderUniformTexelBufferArrayNonUniformIndexing",
value.shader_uniform_texel_buffer_array_non_uniform_indexing,
),
(
"shaderStorageTexelBufferArrayNonUniformIndexing",
value.shader_storage_texel_buffer_array_non_uniform_indexing,
),
(
"descriptorBindingUniformBufferUpdateAfterBind",
value.descriptor_binding_uniform_buffer_update_after_bind,
),
(
"descriptorBindingSampledImageUpdateAfterBind",
value.descriptor_binding_sampled_image_update_after_bind,
),
(
"descriptorBindingStorageImageUpdateAfterBind",
value.descriptor_binding_storage_image_update_after_bind,
),
(
"descriptorBindingStorageBufferUpdateAfterBind",
value.descriptor_binding_storage_buffer_update_after_bind,
),
(
"descriptorBindingUniformTexelBufferUpdateAfterBind",
value.descriptor_binding_uniform_texel_buffer_update_after_bind,
),
(
"descriptorBindingStorageTexelBufferUpdateAfterBind",
value.descriptor_binding_storage_texel_buffer_update_after_bind,
),
(
"descriptorBindingUpdateUnusedWhilePending",
value.descriptor_binding_update_unused_while_pending,
),
(
"descriptorBindingPartiallyBound",
value.descriptor_binding_partially_bound,
),
(
"descriptorBindingVariableDescriptorCount",
value.descriptor_binding_variable_descriptor_count,
),
("runtimeDescriptorArray", value.runtime_descriptor_array),
("samplerFilterMinmax", value.sampler_filter_minmax),
("scalarBlockLayout", value.scalar_block_layout),
("imagelessFramebuffer", value.imageless_framebuffer),
(
"uniformBufferStandardLayout",
value.uniform_buffer_standard_layout,
),
(
"shaderSubgroupExtendedTypes",
value.shader_subgroup_extended_types,
),
(
"separateDepthStencilLayouts",
value.separate_depth_stencil_layouts,
),
("hostQueryReset", value.host_query_reset),
("timelineSemaphore", value.timeline_semaphore),
("bufferDeviceAddress", value.buffer_device_address),
(
"bufferDeviceAddressCaptureReplay",
value.buffer_device_address_capture_replay,
),
(
"bufferDeviceAddressMultiDevice",
value.buffer_device_address_multi_device,
),
("vulkanMemoryModel", value.vulkan_memory_model),
(
"vulkanMemoryModelDeviceScope",
value.vulkan_memory_model_device_scope,
),
(
"vulkanMemoryModelAvailabilityVisibilityChains",
value.vulkan_memory_model_availability_visibility_chains,
),
(
"shaderOutputViewportIndex",
value.shader_output_viewport_index,
),
("shaderOutputLayer", value.shader_output_layer),
(
"subgroupBroadcastDynamicId",
value.subgroup_broadcast_dynamic_id,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VULKAN_1_3_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVulkan13Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
&[
("robustImageAccess", value.robust_image_access),
("inlineUniformBlock", value.inline_uniform_block),
(
"descriptorBindingInlineUniformBlockUpdateAfterBind",
value.descriptor_binding_inline_uniform_block_update_after_bind,
),
(
"pipelineCreationCacheControl",
value.pipeline_creation_cache_control,
),
("privateData", value.private_data),
(
"shaderDemoteToHelperInvocation",
value.shader_demote_to_helper_invocation,
),
(
"shaderTerminateInvocation",
value.shader_terminate_invocation,
),
("subgroupSizeControl", value.subgroup_size_control),
("computeFullSubgroups", value.compute_full_subgroups),
("synchronization2", value.synchronization2),
(
"textureCompressionASTC_HDR",
value.texture_compression_astc_hdr,
),
(
"shaderZeroInitializeWorkgroupMemory",
value.shader_zero_initialize_workgroup_memory,
),
("dynamicRendering", value.dynamic_rendering),
("shaderIntegerDotProduct", value.shader_integer_dot_product),
("maintenance4", value.maintenance4),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VULKAN_1_4_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVulkan14Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_VULKAN_1_4_FEATURES,
&[
("globalPriorityQuery", value.global_priority_query),
("shaderSubgroupRotate", value.shader_subgroup_rotate),
(
"shaderSubgroupRotateClustered",
value.shader_subgroup_rotate_clustered,
),
("shaderFloatControls2", value.shader_float_controls2),
("shaderExpectAssume", value.shader_expect_assume),
("rectangularLines", value.rectangular_lines),
("bresenhamLines", value.bresenham_lines),
("smoothLines", value.smooth_lines),
("stippledRectangularLines", value.stippled_rectangular_lines),
("stippledBresenhamLines", value.stippled_bresenham_lines),
("stippledSmoothLines", value.stippled_smooth_lines),
(
"vertexAttributeInstanceRateDivisor",
value.vertex_attribute_instance_rate_divisor,
),
(
"vertexAttributeInstanceRateZeroDivisor",
value.vertex_attribute_instance_rate_zero_divisor,
),
("indexTypeUint8", value.index_type_uint8),
(
"dynamicRenderingLocalRead",
value.dynamic_rendering_local_read,
),
("maintenance5", value.maintenance5),
("maintenance6", value.maintenance6),
("pipelineProtectedAccess", value.pipeline_protected_access),
("pipelineRobustness", value.pipeline_robustness),
("hostImageCopy", value.host_image_copy),
("pushDescriptor", value.push_descriptor),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCoherentMemoryFeaturesAMD>() };
features.record(
StructureType::PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD,
&[("deviceCoherentMemory", value.device_coherent_memory)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_GPA_FEATURES_AMD => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceGpaFeaturesAMD>() };
features.record(
StructureType::PHYSICAL_DEVICE_GPA_FEATURES_AMD,
&[
("perfCounters", value.perf_counters),
("streamingPerfCounters", value.streaming_perf_counters),
("sqThreadTracing", value.sq_thread_tracing),
("clockModes", value.clock_modes),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCustomBorderColorFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT,
&[
("customBorderColors", value.custom_border_colors),
(
"customBorderColorWithoutFormat",
value.custom_border_color_without_format,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceBorderColorSwizzleFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT,
&[
("borderColorSwizzle", value.border_color_swizzle),
(
"borderColorSwizzleFromImage",
value.border_color_swizzle_from_image,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT,
&[("extendedDynamicState", value.extended_dynamic_state)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceExtendedDynamicState2FeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT,
&[
("extendedDynamicState2", value.extended_dynamic_state2),
(
"extendedDynamicState2LogicOp",
value.extended_dynamic_state2_logic_op,
),
(
"extendedDynamicState2PatchControlPoints",
value.extended_dynamic_state2_patch_control_points,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceExtendedDynamicState3FeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT,
&[
(
"extendedDynamicState3TessellationDomainOrigin",
value.extended_dynamic_state3_tessellation_domain_origin,
),
(
"extendedDynamicState3DepthClampEnable",
value.extended_dynamic_state3_depth_clamp_enable,
),
(
"extendedDynamicState3PolygonMode",
value.extended_dynamic_state3_polygon_mode,
),
(
"extendedDynamicState3RasterizationSamples",
value.extended_dynamic_state3_rasterization_samples,
),
(
"extendedDynamicState3SampleMask",
value.extended_dynamic_state3_sample_mask,
),
(
"extendedDynamicState3AlphaToCoverageEnable",
value.extended_dynamic_state3_alpha_to_coverage_enable,
),
(
"extendedDynamicState3AlphaToOneEnable",
value.extended_dynamic_state3_alpha_to_one_enable,
),
(
"extendedDynamicState3LogicOpEnable",
value.extended_dynamic_state3_logic_op_enable,
),
(
"extendedDynamicState3ColorBlendEnable",
value.extended_dynamic_state3_color_blend_enable,
),
(
"extendedDynamicState3ColorBlendEquation",
value.extended_dynamic_state3_color_blend_equation,
),
(
"extendedDynamicState3ColorWriteMask",
value.extended_dynamic_state3_color_write_mask,
),
(
"extendedDynamicState3RasterizationStream",
value.extended_dynamic_state3_rasterization_stream,
),
(
"extendedDynamicState3ConservativeRasterizationMode",
value.extended_dynamic_state3_conservative_rasterization_mode,
),
(
"extendedDynamicState3ExtraPrimitiveOverestimationSize",
value.extended_dynamic_state3_extra_primitive_overestimation_size,
),
(
"extendedDynamicState3DepthClipEnable",
value.extended_dynamic_state3_depth_clip_enable,
),
(
"extendedDynamicState3SampleLocationsEnable",
value.extended_dynamic_state3_sample_locations_enable,
),
(
"extendedDynamicState3ColorBlendAdvanced",
value.extended_dynamic_state3_color_blend_advanced,
),
(
"extendedDynamicState3ProvokingVertexMode",
value.extended_dynamic_state3_provoking_vertex_mode,
),
(
"extendedDynamicState3LineRasterizationMode",
value.extended_dynamic_state3_line_rasterization_mode,
),
(
"extendedDynamicState3LineStippleEnable",
value.extended_dynamic_state3_line_stipple_enable,
),
(
"extendedDynamicState3DepthClipNegativeOneToOne",
value.extended_dynamic_state3_depth_clip_negative_one_to_one,
),
(
"extendedDynamicState3ViewportWScalingEnable",
value.extended_dynamic_state3_viewport_w_scaling_enable,
),
(
"extendedDynamicState3ViewportSwizzle",
value.extended_dynamic_state3_viewport_swizzle,
),
(
"extendedDynamicState3CoverageToColorEnable",
value.extended_dynamic_state3_coverage_to_color_enable,
),
(
"extendedDynamicState3CoverageToColorLocation",
value.extended_dynamic_state3_coverage_to_color_location,
),
(
"extendedDynamicState3CoverageModulationMode",
value.extended_dynamic_state3_coverage_modulation_mode,
),
(
"extendedDynamicState3CoverageModulationTableEnable",
value.extended_dynamic_state3_coverage_modulation_table_enable,
),
(
"extendedDynamicState3CoverageModulationTable",
value.extended_dynamic_state3_coverage_modulation_table,
),
(
"extendedDynamicState3CoverageReductionMode",
value.extended_dynamic_state3_coverage_reduction_mode,
),
(
"extendedDynamicState3RepresentativeFragmentTestEnable",
value.extended_dynamic_state3_representative_fragment_test_enable,
),
(
"extendedDynamicState3ShadingRateImageEnable",
value.extended_dynamic_state3_shading_rate_image_enable,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_EXTENDED_FLAGS_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceExtendedFlagsFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTENDED_FLAGS_FEATURES_KHR,
&[("extendedFlags", value.extended_flags)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePartitionedAccelerationStructureFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV,
&[(
"partitionedAccelerationStructure",
value.partitioned_acceleration_structure,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDiagnosticsConfigFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV,
&[("diagnosticsConfig", value.diagnostics_config)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES,
&[(
"shaderZeroInitializeWorkgroupMemory",
value.shader_zero_initialize_workgroup_memory,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR,
&[(
"shaderSubgroupUniformControlFlow",
value.shader_subgroup_uniform_control_flow,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRobustness2FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR,
&[
("robustBufferAccess2", value.robust_buffer_access2),
("robustImageAccess2", value.robust_image_access2),
("nullDescriptor", value.null_descriptor),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageRobustnessFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES,
&[("robustImageAccess", value.robust_image_access)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR,
&[
(
"workgroupMemoryExplicitLayout",
value.workgroup_memory_explicit_layout,
),
(
"workgroupMemoryExplicitLayoutScalarBlockLayout",
value.workgroup_memory_explicit_layout_scalar_block_layout,
),
(
"workgroupMemoryExplicitLayout8BitAccess",
value.workgroup_memory_explicit_layout8_bit_access,
),
(
"workgroupMemoryExplicitLayout16BitAccess",
value.workgroup_memory_explicit_layout16_bit_access,
),
],
)?;
Ok(true)
}
#[cfg(feature = "provisional")]
StructureType::PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePortabilitySubsetFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR,
&[
(
"constantAlphaColorBlendFactors",
value.constant_alpha_color_blend_factors,
),
("events", value.events),
(
"imageViewFormatReinterpretation",
value.image_view_format_reinterpretation,
),
("imageViewFormatSwizzle", value.image_view_format_swizzle),
("imageView2DOn3DImage", value.image_view2_d_on3_d_image),
("multisampleArrayImage", value.multisample_array_image),
(
"mutableComparisonSamplers",
value.mutable_comparison_samplers,
),
("pointPolygons", value.point_polygons),
("samplerMipLodBias", value.sampler_mip_lod_bias),
("separateStencilMaskRef", value.separate_stencil_mask_ref),
(
"shaderSampleRateInterpolationFunctions",
value.shader_sample_rate_interpolation_functions,
),
("tessellationIsolines", value.tessellation_isolines),
("tessellationPointMode", value.tessellation_point_mode),
("triangleFans", value.triangle_fans),
(
"vertexAttributeAccessBeyondStride",
value.vertex_attribute_access_beyond_stride,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDevice4444FormatsFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT,
&[
("formatA4R4G4B4", value.format_a4_r4_g4_b4),
("formatA4B4G4R4", value.format_a4_b4_g4_r4),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSubpassShadingFeaturesHUAWEI>() };
features.record(
StructureType::PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI,
&[("subpassShading", value.subpass_shading)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceClusterCullingShaderFeaturesHUAWEI>() };
features.record(
StructureType::PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI,
&[
("clustercullingShader", value.clusterculling_shader),
(
"multiviewClusterCullingShader",
value.multiview_cluster_culling_shader,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT,
&[
("shaderImageInt64Atomics", value.shader_image_int64_atomics),
("sparseImageInt64Atomics", value.sparse_image_int64_atomics),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFragmentShadingRateFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR,
&[
(
"pipelineFragmentShadingRate",
value.pipeline_fragment_shading_rate,
),
(
"primitiveFragmentShadingRate",
value.primitive_fragment_shading_rate,
),
(
"attachmentFragmentShadingRate",
value.attachment_fragment_shading_rate,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderTerminateInvocationFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES,
&[(
"shaderTerminateInvocation",
value.shader_terminate_invocation,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV,
&[
(
"fragmentShadingRateEnums",
value.fragment_shading_rate_enums,
),
(
"supersampleFragmentShadingRates",
value.supersample_fragment_shading_rates,
),
(
"noInvocationFragmentShadingRates",
value.no_invocation_fragment_shading_rates,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImage2DViewOf3DFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT,
&[
("image2DViewOf3D", value.image2_d_view_of3_d),
("sampler2DViewOf3D", value.sampler2_d_view_of3_d),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageSlicedViewOf3DFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT,
&[("imageSlicedViewOf3D", value.image_sliced_view_of3_d)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT,
&[(
"attachmentFeedbackLoopDynamicState",
value.attachment_feedback_loop_dynamic_state,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceLegacyVertexAttributesFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT,
&[("legacyVertexAttributes", value.legacy_vertex_attributes)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMutableDescriptorTypeFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT,
&[("mutableDescriptorType", value.mutable_descriptor_type)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDepthClipControlFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT,
&[("depthClipControl", value.depth_clip_control)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT,
&[(
"zeroInitializeDeviceMemory",
value.zero_initialize_device_memory,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCustomResolveFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT,
&[("customResolve", value.custom_resolve)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT,
&[
("deviceGeneratedCommands", value.device_generated_commands),
(
"dynamicGeneratedPipelineLayout",
value.dynamic_generated_pipeline_layout,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDepthClampControlFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT,
&[("depthClampControl", value.depth_clamp_control)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVertexInputDynamicStateFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT,
&[("vertexInputDynamicState", value.vertex_input_dynamic_state)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceExternalMemoryRDMAFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV,
&[("externalMemoryRDMA", value.external_memory_rdma)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR,
&[(
"shaderRelaxedExtendedInstruction",
value.shader_relaxed_extended_instruction,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceColorWriteEnableFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT,
&[("colorWriteEnable", value.color_write_enable)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSynchronization2Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES,
&[("synchronization2", value.synchronization2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceUnifiedImageLayoutsFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR,
&[
("unifiedImageLayouts", value.unified_image_layouts),
(
"unifiedImageLayoutsVideo",
value.unified_image_layouts_video,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceHostImageCopyFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES,
&[("hostImageCopy", value.host_image_copy)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT,
&[
("primitivesGeneratedQuery", value.primitives_generated_query),
(
"primitivesGeneratedQueryWithRasterizerDiscard",
value.primitives_generated_query_with_rasterizer_discard,
),
(
"primitivesGeneratedQueryWithNonZeroStreams",
value.primitives_generated_query_with_non_zero_streams,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceLegacyDitheringFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT,
&[("legacyDithering", value.legacy_dithering)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT,
&[(
"multisampledRenderToSingleSampled",
value.multisampled_render_to_single_sampled,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SWAPCHAIN_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceMultisampledRenderToSwapchainFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SWAPCHAIN_FEATURES_EXT,
&[(
"multisampledRenderToSwapchain",
value.multisampled_render_to_swapchain,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePipelineProtectedAccessFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES,
&[("pipelineProtectedAccess", value.pipeline_protected_access)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVideoMaintenance1FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR,
&[("videoMaintenance1", value.video_maintenance1)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVideoMaintenance2FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR,
&[("videoMaintenance2", value.video_maintenance2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVideoDecodeVP9FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR,
&[("videoDecodeVP9", value.video_decode_vp9)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR,
&[(
"videoEncodeQuantizationMap",
value.video_encode_quantization_map,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_FEEDBACK_2_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVideoEncodeFeedback2FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_FEEDBACK_2_FEATURES_KHR,
&[("videoEncodeFeedback2", value.video_encode_feedback2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVideoEncodeAV1FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR,
&[("videoEncodeAV1", value.video_encode_av1)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceInheritedViewportScissorFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV,
&[(
"inheritedViewportScissor2D",
value.inherited_viewport_scissor2_d,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT,
&[("ycbcr2plane444Formats", value.ycbcr2plane444_formats)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceProvokingVertexFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT,
&[
("provokingVertexLast", value.provoking_vertex_last),
(
"transformFeedbackPreservesProvokingVertex",
value.transform_feedback_preserves_provoking_vertex,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_INTRA_REFRESH_FEATURES_KHR,
&[("videoEncodeIntraRefresh", value.video_encode_intra_refresh)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDescriptorBufferFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT,
&[
("descriptorBuffer", value.descriptor_buffer),
(
"descriptorBufferCaptureReplay",
value.descriptor_buffer_capture_replay,
),
(
"descriptorBufferImageLayoutIgnored",
value.descriptor_buffer_image_layout_ignored,
),
(
"descriptorBufferPushDescriptors",
value.descriptor_buffer_push_descriptors,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderIntegerDotProductFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES,
&[("shaderIntegerDotProduct", value.shader_integer_dot_product)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceFragmentShaderBarycentricFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR,
&[(
"fragmentShaderBarycentric",
value.fragment_shader_barycentric,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderFmaFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_FMA_FEATURES_KHR,
&[
("shaderFmaFloat16", value.shader_fma_float16),
("shaderFmaFloat32", value.shader_fma_float32),
("shaderFmaFloat64", value.shader_fma_float64),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingMotionBlurFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV,
&[
("rayTracingMotionBlur", value.ray_tracing_motion_blur),
(
"rayTracingMotionBlurPipelineTraceRaysIndirect",
value.ray_tracing_motion_blur_pipeline_trace_rays_indirect,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingValidationFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV,
&[("rayTracingValidation", value.ray_tracing_validation)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV,
&[
("spheres", value.spheres),
("linearSweptSpheres", value.linear_swept_spheres),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRGBA10X6FormatsFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT,
&[(
"formatRgba10x6WithoutYCbCrSampler",
value.format_rgba10x6_without_y_cb_cr_sampler,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDynamicRenderingFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES,
&[("dynamicRendering", value.dynamic_rendering)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageViewMinLodFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT,
&[("minLod", value.min_lod)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT,
&[
(
"rasterizationOrderColorAttachmentAccess",
value.rasterization_order_color_attachment_access,
),
(
"rasterizationOrderDepthAttachmentAccess",
value.rasterization_order_depth_attachment_access,
),
(
"rasterizationOrderStencilAttachmentAccess",
value.rasterization_order_stencil_attachment_access,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceLinearColorAttachmentFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV,
&[("linearColorAttachment", value.linear_color_attachment)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT,
&[("graphicsPipelineLibrary", value.graphics_pipeline_library)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePipelineBinaryFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_BINARY_FEATURES_KHR,
&[("pipelineBinaries", value.pipeline_binaries)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_NEURAL_ACCELERATOR_STATISTICS_FEATURES_ARM => {
let value = unsafe {
&*node.cast::<vk::PhysicalDeviceDataGraphNeuralAcceleratorStatisticsFeaturesARM>()
};
features.record(
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_NEURAL_ACCELERATOR_STATISTICS_FEATURES_ARM,
&[(
"dataGraphNeuralAcceleratorStatistics",
value.data_graph_neural_accelerator_statistics,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE>() };
features.record(
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE,
&[(
"descriptorSetHostMapping",
value.descriptor_set_host_mapping,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceNestedCommandBufferFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT,
&[
("nestedCommandBuffer", value.nested_command_buffer),
(
"nestedCommandBufferRendering",
value.nested_command_buffer_rendering,
),
(
"nestedCommandBufferSimultaneousUse",
value.nested_command_buffer_simultaneous_use,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderModuleIdentifierFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT,
&[("shaderModuleIdentifier", value.shader_module_identifier)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageCompressionControlFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT,
&[("imageCompressionControl", value.image_compression_control)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT,
&[(
"imageCompressionControlSwapchain",
value.image_compression_control_swapchain,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSubpassMergeFeedbackFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT,
&[("subpassMergeFeedback", value.subpass_merge_feedback)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceOpacityMicromapFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_KHR,
&[("micromap", value.micromap)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceOpacityMicromapFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT,
&[
("micromap", value.micromap),
("micromapCaptureReplay", value.micromap_capture_replay),
("micromapHostCommands", value.micromap_host_commands),
],
)?;
Ok(true)
}
#[cfg(feature = "provisional")]
StructureType::PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDisplacementMicromapFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV,
&[("displacementMicromap", value.displacement_micromap)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePipelinePropertiesFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT,
&[(
"pipelinePropertiesIdentifier",
value.pipeline_properties_identifier,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD,
&[(
"shaderEarlyAndLateFragmentTests",
value.shader_early_and_late_fragment_tests,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceNonSeamlessCubeMapFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT,
&[("nonSeamlessCubeMap", value.non_seamless_cube_map)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePipelineRobustnessFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES,
&[("pipelineRobustness", value.pipeline_robustness)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_MULTIPLE_WAIT_QUEUES_FEATURES_QCOM => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderMultipleWaitQueuesFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_MULTIPLE_WAIT_QUEUES_FEATURES_QCOM,
&[(
"shaderMultipleWaitQueues",
value.shader_multiple_wait_queues,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageProcessingFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM,
&[
("textureSampleWeighted", value.texture_sample_weighted),
("textureBoxFilter", value.texture_box_filter),
("textureBlockMatch", value.texture_block_match),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTilePropertiesFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM,
&[("tileProperties", value.tile_properties)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceAmigoProfilingFeaturesSEC>() };
features.record(
StructureType::PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC,
&[("amigoProfiling", value.amigo_profiling)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT,
&[(
"attachmentFeedbackLoopLayout",
value.attachment_feedback_loop_layout,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceAddressBindingReportFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT,
&[("reportAddressBinding", value.report_address_binding)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceOpticalFlowFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV,
&[("opticalFlow", value.optical_flow)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FAULT_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFaultFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_FAULT_FEATURES_EXT,
&[
("deviceFault", value.device_fault),
("deviceFaultVendorBinary", value.device_fault_vendor_binary),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FAULT_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFaultFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_FAULT_FEATURES_KHR,
&[
("deviceFault", value.device_fault),
("deviceFaultVendorBinary", value.device_fault_vendor_binary),
("deviceFaultReportMasked", value.device_fault_report_masked),
(
"deviceFaultDeviceLostOnMasked",
value.device_fault_device_lost_on_masked,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePipelineLibraryGroupHandlesFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_KHR,
&[(
"pipelineLibraryGroupHandles",
value.pipeline_library_group_handles,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderCoreBuiltinsFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM,
&[("shaderCoreBuiltins", value.shader_core_builtins)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFrameBoundaryFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT,
&[("frameBoundary", value.frame_boundary)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT,
&[(
"dynamicRenderingUnusedAttachments",
value.dynamic_rendering_unused_attachments,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_INTERNALLY_SYNCHRONIZED_QUEUES_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceInternallySynchronizedQueuesFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_INTERNALLY_SYNCHRONIZED_QUEUES_FEATURES_KHR,
&[(
"internallySynchronizedQueues",
value.internally_synchronized_queues,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSwapchainMaintenance1FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR,
&[("swapchainMaintenance1", value.swapchain_maintenance1)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDepthBiasControlFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT,
&[
("depthBiasControl", value.depth_bias_control),
(
"leastRepresentableValueForceUnormRepresentation",
value.least_representable_value_force_unorm_representation,
),
("floatRepresentation", value.float_representation),
("depthBiasExact", value.depth_bias_exact),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingInvocationReorderFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_EXT,
&[(
"rayTracingInvocationReorder",
value.ray_tracing_invocation_reorder,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingInvocationReorderFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV,
&[(
"rayTracingInvocationReorder",
value.ray_tracing_invocation_reorder,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV,
&[(
"extendedSparseAddressSpace",
value.extended_sparse_address_space,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM,
&[(
"multiviewPerViewViewports",
value.multiview_per_view_viewports,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRayTracingPositionFetchFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR,
&[("rayTracingPositionFetch", value.ray_tracing_position_fetch)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM,
&[(
"multiviewPerViewRenderAreas",
value.multiview_per_view_render_areas,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderObjectFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT,
&[("shaderObject", value.shader_object)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderTileImageFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT,
&[
(
"shaderTileImageColorReadAccess",
value.shader_tile_image_color_read_access,
),
(
"shaderTileImageDepthReadAccess",
value.shader_tile_image_depth_read_access,
),
(
"shaderTileImageStencilReadAccess",
value.shader_tile_image_stencil_read_access,
),
],
)?;
Ok(true)
}
#[cfg(feature = "platform-screen")]
StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX,
&[("screenBufferImport", value.screen_buffer_import)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeMatrixFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR,
&[
("cooperativeMatrix", value.cooperative_matrix),
(
"cooperativeMatrixRobustBufferAccess",
value.cooperative_matrix_robust_buffer_access,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_CONVERSION_FEATURES_QCOM => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeMatrixConversionFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_CONVERSION_FEATURES_QCOM,
&[(
"cooperativeMatrixConversion",
value.cooperative_matrix_conversion,
)],
)?;
Ok(true)
}
#[cfg(feature = "provisional")]
StructureType::PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderEnqueueFeaturesAMDX>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX,
&[
("shaderEnqueue", value.shader_enqueue),
("shaderMeshEnqueue", value.shader_mesh_enqueue),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceAntiLagFeaturesAMD>() };
features.record(
StructureType::PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD,
&[("antiLag", value.anti_lag)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTileMemoryHeapFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM,
&[("tileMemoryHeap", value.tile_memory_heap)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCubicClampFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM,
&[("cubicRangeClamp", value.cubic_range_clamp)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceYcbcrDegammaFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM,
&[("ycbcrDegamma", value.ycbcr_degamma)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCubicWeightsFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM,
&[("selectableCubicWeights", value.selectable_cubic_weights)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageProcessing2FeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM,
&[("textureBlockMatch2", value.texture_block_match2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_3_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageProcessing3FeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_3_FEATURES_QCOM,
&[
("imageGatherLinear", value.image_gather_linear),
(
"imageGatherExtendedModes",
value.image_gather_extended_modes,
),
(
"blockMatchExtendedClampToEdge",
value.block_match_extended_clamp_to_edge,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceDescriptorPoolOverallocationFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV,
&[(
"descriptorPoolOverallocation",
value.descriptor_pool_overallocation,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePerStageDescriptorSetFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV,
&[
("perStageDescriptorSet", value.per_stage_descriptor_set),
("dynamicPipelineLayout", value.dynamic_pipeline_layout),
],
)?;
Ok(true)
}
#[cfg(feature = "platform-android")]
StructureType::PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceExternalFormatResolveFeaturesANDROID>() };
features.record(
StructureType::PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID,
&[("externalFormatResolve", value.external_format_resolve)],
)?;
Ok(true)
}
#[cfg(feature = "provisional")]
StructureType::PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCudaKernelLaunchFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV,
&[(
"cudaKernelLaunchFeatures",
value.cuda_kernel_launch_features,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceSchedulingControlsFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM,
&[("schedulingControls", value.scheduling_controls)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRelaxedLineRasterizationFeaturesIMG>() };
features.record(
StructureType::PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG,
&[("relaxedLineRasterization", value.relaxed_line_rasterization)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRenderPassStripedFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM,
&[("renderPassStriped", value.render_pass_striped)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePipelineOpacityMicromapFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM,
&[("pipelineOpacityMicromap", value.pipeline_opacity_micromap)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR,
&[(
"shaderMaximalReconvergence",
value.shader_maximal_reconvergence,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderSubgroupRotateFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES,
&[
("shaderSubgroupRotate", value.shader_subgroup_rotate),
(
"shaderSubgroupRotateClustered",
value.shader_subgroup_rotate_clustered,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderExpectAssumeFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES,
&[("shaderExpectAssume", value.shader_expect_assume)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderFloatControls2Features>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES,
&[("shaderFloatControls2", value.shader_float_controls2)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDynamicRenderingLocalReadFeatures>() };
features.record(
StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES,
&[(
"dynamicRenderingLocalRead",
value.dynamic_rendering_local_read,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderQuadControlFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR,
&[("shaderQuadControl", value.shader_quad_control)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV,
&[(
"shaderFloat16VectorAtomics",
value.shader_float16_vector_atomics,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceMapMemoryPlacedFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT,
&[
("memoryMapPlaced", value.memory_map_placed),
("memoryMapRangePlaced", value.memory_map_range_placed),
("memoryUnmapReserve", value.memory_unmap_reserve),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderBfloat16FeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR,
&[
("shaderBFloat16Type", value.shader_b_float16_type),
(
"shaderBFloat16DotProduct",
value.shader_b_float16_dot_product,
),
(
"shaderBFloat16CooperativeMatrix",
value.shader_b_float16_cooperative_matrix,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceRawAccessChainsFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV,
&[("shaderRawAccessChains", value.shader_raw_access_chains)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCommandBufferInheritanceFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV,
&[("commandBufferInheritance", value.command_buffer_inheritance)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageAlignmentControlFeaturesMESA>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA,
&[("imageAlignmentControl", value.image_alignment_control)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderReplicatedCompositesFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT,
&[(
"shaderReplicatedComposites",
value.shader_replicated_composites,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR,
&[(
"presentModeFifoLatestReady",
value.present_mode_fifo_latest_ready,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeMatrix2FeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV,
&[
(
"cooperativeMatrixWorkgroupScope",
value.cooperative_matrix_workgroup_scope,
),
(
"cooperativeMatrixFlexibleDimensions",
value.cooperative_matrix_flexible_dimensions,
),
(
"cooperativeMatrixReductions",
value.cooperative_matrix_reductions,
),
(
"cooperativeMatrixConversions",
value.cooperative_matrix_conversions,
),
(
"cooperativeMatrixPerElementOperations",
value.cooperative_matrix_per_element_operations,
),
(
"cooperativeMatrixTensorAddressing",
value.cooperative_matrix_tensor_addressing,
),
(
"cooperativeMatrixBlockLoads",
value.cooperative_matrix_block_loads,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_DECODE_VECTOR_FEATURES_NV => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeMatrixDecodeVectorFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_DECODE_VECTOR_FEATURES_NV,
&[(
"cooperativeMatrixDecodeVector",
value.cooperative_matrix_decode_vector,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceHdrVividFeaturesHUAWEI>() };
features.record(
StructureType::PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI,
&[("hdrVivid", value.hdr_vivid)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceVertexAttributeRobustnessFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT,
&[(
"vertexAttributeRobustness",
value.vertex_attribute_robustness,
)],
)?;
Ok(true)
}
#[cfg(feature = "provisional")]
StructureType::PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDenseGeometryFormatFeaturesAMDX>() };
features.record(
StructureType::PHYSICAL_DEVICE_DENSE_GEOMETRY_FORMAT_FEATURES_AMDX,
&[("denseGeometryFormat", value.dense_geometry_format)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDepthClampZeroOneFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR,
&[("depthClampZeroOne", value.depth_clamp_zero_one)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeVectorFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV,
&[
("cooperativeVector", value.cooperative_vector),
(
"cooperativeVectorTraining",
value.cooperative_vector_training,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTileShadingFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM,
&[
("tileShading", value.tile_shading),
(
"tileShadingFragmentStage",
value.tile_shading_fragment_stage,
),
(
"tileShadingColorAttachments",
value.tile_shading_color_attachments,
),
(
"tileShadingDepthAttachments",
value.tile_shading_depth_attachments,
),
(
"tileShadingStencilAttachments",
value.tile_shading_stencil_attachments,
),
(
"tileShadingInputAttachments",
value.tile_shading_input_attachments,
),
(
"tileShadingSampledAttachments",
value.tile_shading_sampled_attachments,
),
("tileShadingPerTileDraw", value.tile_shading_per_tile_draw),
(
"tileShadingPerTileDispatch",
value.tile_shading_per_tile_dispatch,
),
("tileShadingDispatchTile", value.tile_shading_dispatch_tile),
("tileShadingApron", value.tile_shading_apron),
(
"tileShadingAnisotropicApron",
value.tile_shading_anisotropic_apron,
),
("tileShadingAtomicOps", value.tile_shading_atomic_ops),
(
"tileShadingImageProcessing",
value.tile_shading_image_processing,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE>() };
features.record(
StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE,
&[(
"fragmentDensityMapLayered",
value.fragment_density_map_layered,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePresentMeteringFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV,
&[("presentMetering", value.present_metering)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT,
&[(
"shaderUniformBufferUnsizedArray",
value.shader_uniform_buffer_unsized_array,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE,
&[
(
"shaderMixedFloatDotProductFloat16AccFloat32",
value.shader_mixed_float_dot_product_float16_acc_float32,
),
(
"shaderMixedFloatDotProductFloat16AccFloat16",
value.shader_mixed_float_dot_product_float16_acc_float16,
),
(
"shaderMixedFloatDotProductBFloat16Acc",
value.shader_mixed_float_dot_product_b_float16_acc,
),
(
"shaderMixedFloatDotProductFloat8AccFloat32",
value.shader_mixed_float_dot_product_float8_acc_float32,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PRIMITIVE_RESTART_INDEX_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDevicePrimitiveRestartIndexFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_PRIMITIVE_RESTART_INDEX_FEATURES_EXT,
&[("primitiveRestartIndex", value.primitive_restart_index)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceFormatPackFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM,
&[("formatPack", value.format_pack)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_THROTTLE_HINT_FEATURES_SEC => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceThrottleHintFeaturesSEC>() };
features.record(
StructureType::PHYSICAL_DEVICE_THROTTLE_HINT_FEATURES_SEC,
&[("throttleHint", value.throttle_hint)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TENSOR_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTensorFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_TENSOR_FEATURES_ARM,
&[
("tensorNonPacked", value.tensor_non_packed),
("shaderTensorAccess", value.shader_tensor_access),
(
"shaderStorageTensorArrayDynamicIndexing",
value.shader_storage_tensor_array_dynamic_indexing,
),
(
"shaderStorageTensorArrayNonUniformIndexing",
value.shader_storage_tensor_array_non_uniform_indexing,
),
(
"descriptorBindingStorageTensorUpdateAfterBind",
value.descriptor_binding_storage_tensor_update_after_bind,
),
("tensors", value.tensors),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDescriptorBufferTensorFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM,
&[(
"descriptorBufferTensorDescriptors",
value.descriptor_buffer_tensor_descriptors,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderFloat8FeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT,
&[
("shaderFloat8", value.shader_float8),
(
"shaderFloat8CooperativeMatrix",
value.shader_float8_cooperative_matrix,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDataGraphFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM,
&[
("dataGraph", value.data_graph),
(
"dataGraphUpdateAfterBind",
value.data_graph_update_after_bind,
),
(
"dataGraphSpecializationConstants",
value.data_graph_specialization_constants,
),
(
"dataGraphDescriptorBuffer",
value.data_graph_descriptor_buffer,
),
("dataGraphShaderModule", value.data_graph_shader_module),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC>() };
features.record(
StructureType::PHYSICAL_DEVICE_PIPELINE_CACHE_INCREMENTAL_MODE_FEATURES_SEC,
&[(
"pipelineCacheIncrementalMode",
value.pipeline_cache_incremental_mode,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDataGraphModelFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_MODEL_FEATURES_QCOM,
&[("dataGraphModel", value.data_graph_model)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderUntypedPointersFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR,
&[("shaderUntypedPointers", value.shader_untyped_pointers)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE>() };
features.record(
StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_RGB_CONVERSION_FEATURES_VALVE,
&[(
"videoEncodeRgbConversion",
value.video_encode_rgb_conversion,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShader64BitIndexingFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_64_BIT_INDEXING_FEATURES_EXT,
&[("shader64BitIndexing", value.shader64_bit_indexing)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_QUEUE_PERF_HINT_FEATURES_QCOM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceQueuePerfHintFeaturesQCOM>() };
features.record(
StructureType::PHYSICAL_DEVICE_QUEUE_PERF_HINT_FEATURES_QCOM,
&[("queuePerfHint", value.queue_perf_hint)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM => {
let value =
unsafe { &*node.cast::<vk::PhysicalDevicePerformanceCountersByRegionFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_PERFORMANCE_COUNTERS_BY_REGION_FEATURES_ARM,
&[(
"performanceCountersByRegion",
value.performance_counters_by_region,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceComputeOccupancyPriorityFeaturesNV>() };
features.record(
StructureType::PHYSICAL_DEVICE_COMPUTE_OCCUPANCY_PRIORITY_FEATURES_NV,
&[("computeOccupancyPriority", value.compute_occupancy_priority)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderLongVectorFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT,
&[("longVector", value.long_vector)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceTextureCompressionASTC3DFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_3D_FEATURES_EXT,
&[(
"textureCompressionASTC_3D",
value.texture_compression_astc_3_d,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderSubgroupPartitionedFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT,
&[(
"shaderSubgroupPartitioned",
value.shader_subgroup_partitioned,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderSplitBarrierFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_SPLIT_BARRIER_FEATURES_EXT,
&[("shaderSplitBarrier", value.shader_split_barrier)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDescriptorHeapFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_DESCRIPTOR_HEAP_FEATURES_EXT,
&[
("descriptorHeap", value.descriptor_heap),
(
"descriptorHeapCaptureReplay",
value.descriptor_heap_capture_replay,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderInstrumentationFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_FEATURES_ARM,
&[("shaderInstrumentation", value.shader_instrumentation)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DEVICE_ADDRESS_COMMANDS_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDeviceAddressCommandsFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_DEVICE_ADDRESS_COMMANDS_FEATURES_KHR,
&[("deviceAddressCommands", value.device_address_commands)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_CONSTANT_DATA_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderConstantDataFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_CONSTANT_DATA_FEATURES_KHR,
&[("shaderConstantData", value.shader_constant_data)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_ABORT_FEATURES_KHR => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceShaderAbortFeaturesKHR>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_ABORT_FEATURES_KHR,
&[("shaderAbort", value.shader_abort)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_OPTICAL_FLOW_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceDataGraphOpticalFlowFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_DATA_GRAPH_OPTICAL_FLOW_FEATURES_ARM,
&[("dataGraphOpticalFlow", value.data_graph_optical_flow)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_IMAGE_TILING_CONTROL_FEATURES_EXT => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceImageTilingControlFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_IMAGE_TILING_CONTROL_FEATURES_EXT,
&[("imageTilingControl", value.image_tiling_control)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT,
&[
("shaderFloat4", value.shader_float4),
("shaderFloat6", value.shader_float6),
(
"shaderFloat8UnsignedE8M0",
value.shader_float8_unsigned_e8_m0,
),
("shaderMXInt8", value.shader_mx_int8),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_MAINTENANCE_1_FEATURES_EXT => {
let value =
unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeMatrixMaintenance1FeaturesEXT>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_MAINTENANCE_1_FEATURES_EXT,
&[
(
"cooperativeMatrixProperties2",
value.cooperative_matrix_properties2,
),
(
"cooperativeMatrixReductions",
value.cooperative_matrix_reductions,
),
(
"cooperativeMatrixConversions",
value.cooperative_matrix_conversions,
),
(
"cooperativeMatrixPerElementOperations",
value.cooperative_matrix_per_element_operations,
),
(
"cooperativeMatrixGetCoordinate",
value.cooperative_matrix_get_coordinate,
),
],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_ALLOCATION_ALIGNMENT_FEATURES_VALVE => {
let value = unsafe {
&*node.cast::<vk::PhysicalDeviceBufferDeviceAddressAllocationAlignmentFeaturesVALVE>()
};
features.record(
StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_ALLOCATION_ALIGNMENT_FEATURES_VALVE,
&[(
"bufferDeviceAddressAllocationAlignment",
value.buffer_device_address_allocation_alignment,
)],
)?;
Ok(true)
}
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_LAYOUTS_FEATURES_ARM => {
let value = unsafe { &*node.cast::<vk::PhysicalDeviceCooperativeMatrixLayoutsFeaturesARM>() };
features.record(
StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_LAYOUTS_FEATURES_ARM,
&[(
"cooperativeMatrixArmLayouts",
value.cooperative_matrix_arm_layouts,
)],
)?;
Ok(true)
}
_ => Ok(false),
}
}