diff --git a/.commits b/.commits index e9d5a96e..c14f6801 100644 --- a/.commits +++ b/.commits @@ -1,2 +1,2 @@ -KhronosGroup/Vulkan-Docs/main/xml/vk.xml => 6aefabc0ad51073cf060e384ce43a59250d4d69c +KhronosGroup/Vulkan-Docs/main/xml/vk.xml => b0b699e446e3eab9bc0d6b192599871eecf25e1e KhronosGroup/Vulkan-Headers/main/include/vk_video => 0777a3ad88bad5f4b11cfd509458bbc0ddadc773 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index c6e607b8..7c087a02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ - [Removing extra double-quote at the end of a comment in `VkFormatFeatureFlagBits2` (#2680)](https://github.com/KhronosGroup/Vulkan-Docs/commit/5caf874c0d1ec519494beea83703c5478bfe92a1) - [Close #2675](https://github.com/KhronosGroup/Vulkan-Docs/commit/33eff7c90483e5d8ff66e15c06683a9d19772ea3) - [February 20, 2026 Vulkan 1.4.344 spec update](https://github.com/KhronosGroup/Vulkan-Docs/commit/6aefabc0ad51073cf060e384ce43a59250d4d69c) +- [Reserve extension 678 (#2693)](https://github.com/KhronosGroup/Vulkan-Docs/commit/61ec2c24c40b6cc31a55e600d8bd3b33a7c7a307) +- [docs: Fix types tag example (#2688)](https://github.com/KhronosGroup/Vulkan-Docs/commit/f27d8836e8ca5055e847115a3c83fb4c7ba99013) +- [March 6, 2026 Vulkan 1.4.345 spec update](https://github.com/KhronosGroup/Vulkan-Docs/commit/b0b699e446e3eab9bc0d6b192599871eecf25e1e) ## [0.35.0] - 2026-02-15 diff --git a/vulkanalia-sys/src/bitmasks.rs b/vulkanalia-sys/src/bitmasks.rs index 9bab15c3..3441fd1e 100644 --- a/vulkanalia-sys/src/bitmasks.rs +++ b/vulkanalia-sys/src/bitmasks.rs @@ -1558,6 +1558,7 @@ bitflags! { const DESCRIPTOR_HEAP_EXT = 1 << 36; const DISALLOW_OPACITY_MICROMAP_ARM = 1 << 37; const INDIRECT_BINDABLE_EXT = 1 << 38; + const INSTRUMENT_SHADERS_ARM = 1 << 39; const PER_LAYER_FRAGMENT_DENSITY_VALVE = 1 << 40; const _64_BIT_INDEXING_EXT = 1 << 43; } @@ -2047,10 +2048,18 @@ bitflags! { const FRAGMENT_DENSITY_MAP_ATTACHMENT = 1 << 6; const INDIRECT_BINDABLE = 1 << 7; const DESCRIPTOR_HEAP = 1 << 10; + const INSTRUMENT_SHADER_ARM = 1 << 11; const _64_BIT_INDEXING = 1 << 15; } } +bitflags! { + /// + #[repr(transparent)] + #[derive(Default)] + pub struct ShaderInstrumentationValuesFlagsARM: Flags { } +} + bitflags! { /// #[repr(transparent)] diff --git a/vulkanalia-sys/src/commands.rs b/vulkanalia-sys/src/commands.rs index d057eae5..3481ef61 100644 --- a/vulkanalia-sys/src/commands.rs +++ b/vulkanalia-sys/src/commands.rs @@ -197,6 +197,10 @@ pub type PFN_vkBuildMicromapsEXT = unsafe extern "system" fn( _infos: *const MicromapBuildInfoEXT, ) -> Result; +/// +pub type PFN_vkClearShaderInstrumentationMetricsARM = + unsafe extern "system" fn(_device: Device, _instrumentation: ShaderInstrumentationARM); + /// pub type PFN_vkCmdBeginConditionalRenderingEXT = unsafe extern "system" fn( _command_buffer: CommandBuffer, @@ -264,6 +268,12 @@ pub type PFN_vkCmdBeginRendering = unsafe extern "system" fn( /// pub type PFN_vkCmdBeginRenderingKHR = PFN_vkCmdBeginRendering; +/// +pub type PFN_vkCmdBeginShaderInstrumentationARM = unsafe extern "system" fn( + _command_buffer: CommandBuffer, + _instrumentation: ShaderInstrumentationARM, +); + /// pub type PFN_vkCmdBeginTransformFeedbackEXT = unsafe extern "system" fn( _command_buffer: CommandBuffer, @@ -1052,6 +1062,10 @@ pub type PFN_vkCmdEndRendering2KHR = unsafe extern "system" fn( /// pub type PFN_vkCmdEndRenderingKHR = PFN_vkCmdEndRendering; +/// +pub type PFN_vkCmdEndShaderInstrumentationARM = + unsafe extern "system" fn(_command_buffer: CommandBuffer); + /// pub type PFN_vkCmdEndTransformFeedbackEXT = unsafe extern "system" fn( _command_buffer: CommandBuffer, @@ -2572,6 +2586,14 @@ pub type PFN_vkCreateSemaphoreSciSyncPoolNV = unsafe extern "system" fn( _semaphore_pool: *mut SemaphoreSciSyncPoolNV, ) -> Result; +/// +pub type PFN_vkCreateShaderInstrumentationARM = unsafe extern "system" fn( + _device: Device, + _create_info: *const ShaderInstrumentationCreateInfoARM, + _allocator: *const AllocationCallbacks, + _instrumentation: *mut ShaderInstrumentationARM, +) -> Result; + /// pub type PFN_vkCreateShaderModule = unsafe extern "system" fn( _device: Device, @@ -3035,6 +3057,13 @@ pub type PFN_vkDestroyShaderEXT = unsafe extern "system" fn( _allocator: *const AllocationCallbacks, ); +/// +pub type PFN_vkDestroyShaderInstrumentationARM = unsafe extern "system" fn( + _device: Device, + _instrumentation: ShaderInstrumentationARM, + _allocator: *const AllocationCallbacks, +); + /// pub type PFN_vkDestroyShaderModule = unsafe extern "system" fn( _device: Device, @@ -3167,6 +3196,14 @@ pub type PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = _counter_descriptions: *mut PerformanceCounterDescriptionKHR, ) -> Result; +/// +pub type PFN_vkEnumeratePhysicalDeviceShaderInstrumentationMetricsARM = + unsafe extern "system" fn( + _physical_device: PhysicalDevice, + _description_count: *mut u32, + _descriptions: *mut ShaderInstrumentationMetricDescriptionARM, + ) -> Result; + /// pub type PFN_vkEnumeratePhysicalDevices = unsafe extern "system" fn( _instance: Instance, @@ -4693,6 +4730,15 @@ pub type PFN_vkGetShaderInfoAMD = unsafe extern "system" fn( _info: *mut c_void, ) -> Result; +/// +pub type PFN_vkGetShaderInstrumentationValuesARM = unsafe extern "system" fn( + _device: Device, + _instrumentation: ShaderInstrumentationARM, + _metric_block_count: *mut u32, + _metric_values: *mut c_void, + _flags: ShaderInstrumentationValuesFlagsARM, +) -> Result; + /// pub type PFN_vkGetShaderModuleCreateInfoIdentifierEXT = unsafe extern "system" fn( _device: Device, diff --git a/vulkanalia-sys/src/enums.rs b/vulkanalia-sys/src/enums.rs index c17e0b94..661461a1 100644 --- a/vulkanalia-sys/src/enums.rs +++ b/vulkanalia-sys/src/enums.rs @@ -4152,6 +4152,7 @@ impl ObjectType { pub const EXTERNAL_COMPUTE_QUEUE_NV: Self = Self(1000556000); pub const INDIRECT_COMMANDS_LAYOUT_EXT: Self = Self(1000572000); pub const INDIRECT_EXECUTION_SET_EXT: Self = Self(1000572001); + pub const SHADER_INSTRUMENTATION_ARM: Self = Self(1000607000); /// Constructs an instance of this enum with the supplied underlying value. #[inline] @@ -4228,6 +4229,7 @@ impl fmt::Debug for ObjectType { 1000556000 => write!(f, "EXTERNAL_COMPUTE_QUEUE_NV"), 1000572000 => write!(f, "INDIRECT_COMMANDS_LAYOUT_EXT"), 1000572001 => write!(f, "INDIRECT_EXECUTION_SET_EXT"), + 1000607000 => write!(f, "SHADER_INSTRUMENTATION_ARM"), _ => self.0.fmt(f), } } @@ -7498,6 +7500,10 @@ impl StructureType { pub const PERFORMANCE_COUNTER_ARM: Self = Self(1000605002); pub const PERFORMANCE_COUNTER_DESCRIPTION_ARM: Self = Self(1000605003); pub const RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM: Self = Self(1000605004); + pub const PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_FEATURES_ARM: Self = Self(1000607000); + pub const PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_PROPERTIES_ARM: Self = Self(1000607001); + pub const SHADER_INSTRUMENTATION_CREATE_INFO_ARM: Self = Self(1000607002); + pub const SHADER_INSTRUMENTATION_METRIC_DESCRIPTION_ARM: Self = Self(1000607003); pub const PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT: Self = Self(1000608000); pub const PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM: Self = Self(1000609000); pub const PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_LAYERED_FEATURES_VALVE: Self = Self(1000611000); @@ -8972,6 +8978,10 @@ impl fmt::Debug for StructureType { f, "RENDER_PASS_PERFORMANCE_COUNTERS_BY_REGION_BEGIN_INFO_ARM" ), + 1000607000 => write!(f, "PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_FEATURES_ARM"), + 1000607001 => write!(f, "PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_PROPERTIES_ARM"), + 1000607002 => write!(f, "SHADER_INSTRUMENTATION_CREATE_INFO_ARM"), + 1000607003 => write!(f, "SHADER_INSTRUMENTATION_METRIC_DESCRIPTION_ARM"), 1000608000 => write!( f, "PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT" diff --git a/vulkanalia-sys/src/extensions.rs b/vulkanalia-sys/src/extensions.rs index d92dc7b1..1a035d84 100644 --- a/vulkanalia-sys/src/extensions.rs +++ b/vulkanalia-sys/src/extensions.rs @@ -651,6 +651,22 @@ pub const ARM_SHADER_CORE_PROPERTIES_EXTENSION: Extension = Extension { promoted_to: None, }; +/// +#[allow(deprecated)] +pub const ARM_SHADER_INSTRUMENTATION_EXTENSION: Extension = Extension { + name: ExtensionName::from_bytes(b"VK_ARM_shader_instrumentation"), + number: 608, + type_: "device", + author: "ARM", + contact: "Jan-Harald Fredriksen @janharaldfredriksen-arm", + platform: None, + required_extensions: None, + required_version: None, + deprecated_by: None, + obsoleted_by: None, + promoted_to: None, +}; + /// #[allow(deprecated)] pub const ARM_TENSORS_EXTENSION: Extension = Extension { @@ -6565,14 +6581,6 @@ pub const NV_PRESENT_BARRIER_EXTENSION: Extension = Extension { }; /// -/// -/// ## WARNING -/// -/// This is a -/// [provisional extension](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/provisional-headers.html). -/// Provisional extensions are not guaranteed to be backwards compatible and are -/// not intended to be used in production applications. -#[cfg(feature = "provisional")] #[allow(deprecated)] pub const NV_PRESENT_METERING_EXTENSION: Extension = Extension { name: ExtensionName::from_bytes(b"VK_NV_present_metering"), @@ -6580,7 +6588,7 @@ pub const NV_PRESENT_METERING_EXTENSION: Extension = Extension { type_: "device", author: "NV", contact: "Charles Hansen @chansen", - platform: Some("provisional"), + platform: None, required_extensions: None, required_version: None, deprecated_by: None, diff --git a/vulkanalia-sys/src/handles.rs b/vulkanalia-sys/src/handles.rs index c4b4d349..654ad368 100644 --- a/vulkanalia-sys/src/handles.rs +++ b/vulkanalia-sys/src/handles.rs @@ -2287,6 +2287,50 @@ impl fmt::Debug for ShaderEXT { } } +/// +#[repr(transparent)] +#[derive(Copy, Clone, PartialEq, Eq, Hash)] +pub struct ShaderInstrumentationARM(u64); + +impl Handle for ShaderInstrumentationARM { + type Repr = u64; + + const TYPE: ObjectType = ObjectType::SHADER_INSTRUMENTATION_ARM; + + #[inline] + fn null() -> Self { + Self(0) + } + + #[inline] + fn from_raw(value: Self::Repr) -> Self { + Self(value) + } + + #[inline] + fn as_raw(self) -> Self::Repr { + self.0 + } + + #[inline] + fn is_null(self) -> bool { + self.0 == 0 + } +} + +impl Default for ShaderInstrumentationARM { + #[inline] + fn default() -> Self { + Self::null() + } +} + +impl fmt::Debug for ShaderInstrumentationARM { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "ShaderInstrumentationARM({:p})", self.0 as *const u8) + } +} + /// #[repr(transparent)] #[derive(Copy, Clone, PartialEq, Eq, Hash)] diff --git a/vulkanalia-sys/src/structs.rs b/vulkanalia-sys/src/structs.rs index b8f00582..edc8cb44 100644 --- a/vulkanalia-sys/src/structs.rs +++ b/vulkanalia-sys/src/structs.rs @@ -21975,6 +21975,54 @@ impl Default for PhysicalDeviceShaderImageFootprintFeaturesNV { unsafe impl Send for PhysicalDeviceShaderImageFootprintFeaturesNV {} unsafe impl Sync for PhysicalDeviceShaderImageFootprintFeaturesNV {} +/// +#[repr(C)] +#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)] +pub struct PhysicalDeviceShaderInstrumentationFeaturesARM { + pub s_type: StructureType, + pub next: *mut c_void, + pub shader_instrumentation: Bool32, +} + +impl Default for PhysicalDeviceShaderInstrumentationFeaturesARM { + #[inline] + fn default() -> Self { + Self { + s_type: StructureType::PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_FEATURES_ARM, + next: ptr::null_mut(), + shader_instrumentation: Bool32::default(), + } + } +} + +unsafe impl Send for PhysicalDeviceShaderInstrumentationFeaturesARM {} +unsafe impl Sync for PhysicalDeviceShaderInstrumentationFeaturesARM {} + +/// +#[repr(C)] +#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)] +pub struct PhysicalDeviceShaderInstrumentationPropertiesARM { + pub s_type: StructureType, + pub next: *mut c_void, + pub num_metrics: u32, + pub per_basic_block_granularity: Bool32, +} + +impl Default for PhysicalDeviceShaderInstrumentationPropertiesARM { + #[inline] + fn default() -> Self { + Self { + s_type: StructureType::PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_PROPERTIES_ARM, + next: ptr::null_mut(), + num_metrics: u32::default(), + per_basic_block_granularity: Bool32::default(), + } + } +} + +unsafe impl Send for PhysicalDeviceShaderInstrumentationPropertiesARM {} +unsafe impl Sync for PhysicalDeviceShaderInstrumentationPropertiesARM {} + /// #[repr(C)] #[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)] @@ -29173,6 +29221,62 @@ impl Default for ShaderDescriptorSetAndBindingMappingInfoEXT { unsafe impl Send for ShaderDescriptorSetAndBindingMappingInfoEXT {} unsafe impl Sync for ShaderDescriptorSetAndBindingMappingInfoEXT {} +/// +#[repr(C)] +#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)] +pub struct ShaderInstrumentationCreateInfoARM { + pub s_type: StructureType, + pub next: *mut c_void, +} + +impl Default for ShaderInstrumentationCreateInfoARM { + #[inline] + fn default() -> Self { + Self { + s_type: StructureType::SHADER_INSTRUMENTATION_CREATE_INFO_ARM, + next: ptr::null_mut(), + } + } +} + +unsafe impl Send for ShaderInstrumentationCreateInfoARM {} +unsafe impl Sync for ShaderInstrumentationCreateInfoARM {} + +/// +#[repr(C)] +#[derive(Copy, Clone, Default, Debug, Eq, Hash, PartialEq)] +pub struct ShaderInstrumentationMetricDataHeaderARM { + pub result_index: u32, + pub result_sub_index: u32, + pub stages: ShaderStageFlags, + pub basic_block_index: u32, +} + +/// +#[repr(C)] +#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)] +pub struct ShaderInstrumentationMetricDescriptionARM { + pub s_type: StructureType, + pub next: *mut c_void, + pub name: StringArray, + pub description: StringArray, +} + +impl Default for ShaderInstrumentationMetricDescriptionARM { + #[inline] + fn default() -> Self { + Self { + s_type: StructureType::SHADER_INSTRUMENTATION_METRIC_DESCRIPTION_ARM, + next: ptr::null_mut(), + name: StringArray::default(), + description: StringArray::default(), + } + } +} + +unsafe impl Send for ShaderInstrumentationMetricDescriptionARM {} +unsafe impl Sync for ShaderInstrumentationMetricDescriptionARM {} + /// #[repr(C)] #[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)] diff --git a/vulkanalia/src/vk/builders.rs b/vulkanalia/src/vk/builders.rs index 558b91e8..2a5537d5 100644 --- a/vulkanalia/src/vk/builders.rs +++ b/vulkanalia/src/vk/builders.rs @@ -19013,6 +19013,7 @@ unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderFloatControls2Featur unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderFmaFeaturesKHR {} unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT {} unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderImageFootprintFeaturesNV {} +unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderInstrumentationFeaturesARM {} unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderIntegerDotProductFeatures {} unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL {} unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderLongVectorFeaturesEXT {} @@ -51357,6 +51358,7 @@ unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderFloatControls unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderFmaFeaturesKHR {} unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT {} unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderImageFootprintFeaturesNV {} +unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderInstrumentationFeaturesARM {} unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderIntegerDotProductFeatures {} unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL {} unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderLongVectorFeaturesEXT {} @@ -62270,6 +62272,7 @@ unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderCorePropert unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderCorePropertiesAMD {} unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderCorePropertiesARM {} unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderEnqueuePropertiesAMDX {} +unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderInstrumentationPropertiesARM {} unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderIntegerDotProductProperties {} unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderLongVectorPropertiesEXT {} unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderModuleIdentifierPropertiesEXT {} @@ -66676,6 +66679,128 @@ unsafe impl Cast for PhysicalDeviceShaderImageFootprintFeaturesNVBuilder { } } +unsafe impl Cast for PhysicalDeviceShaderInstrumentationFeaturesARM { + type Target = PhysicalDeviceShaderInstrumentationFeaturesARM; + + #[inline] + fn into(self) -> Self::Target { + self + } +} + +impl HasBuilder<'static> for PhysicalDeviceShaderInstrumentationFeaturesARM { + type Builder = PhysicalDeviceShaderInstrumentationFeaturesARMBuilder; +} + +/// A builder for a [`PhysicalDeviceShaderInstrumentationFeaturesARM`]. +#[repr(transparent)] +#[derive(Copy, Clone, Debug, Default)] +pub struct PhysicalDeviceShaderInstrumentationFeaturesARMBuilder { + value: PhysicalDeviceShaderInstrumentationFeaturesARM, +} + +impl PhysicalDeviceShaderInstrumentationFeaturesARMBuilder { + #[inline] + pub fn shader_instrumentation(mut self, shader_instrumentation: bool) -> Self { + self.value.shader_instrumentation = shader_instrumentation as Bool32; + self + } + + #[inline] + pub fn build(self) -> PhysicalDeviceShaderInstrumentationFeaturesARM { + self.value + } +} + +impl ops::Deref for PhysicalDeviceShaderInstrumentationFeaturesARMBuilder { + type Target = PhysicalDeviceShaderInstrumentationFeaturesARM; + + #[inline] + fn deref(&self) -> &Self::Target { + &self.value + } +} + +impl ops::DerefMut for PhysicalDeviceShaderInstrumentationFeaturesARMBuilder { + #[inline] + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.value + } +} + +unsafe impl Cast for PhysicalDeviceShaderInstrumentationFeaturesARMBuilder { + type Target = PhysicalDeviceShaderInstrumentationFeaturesARM; + + #[inline] + fn into(self) -> Self::Target { + self.value + } +} + +unsafe impl Cast for PhysicalDeviceShaderInstrumentationPropertiesARM { + type Target = PhysicalDeviceShaderInstrumentationPropertiesARM; + + #[inline] + fn into(self) -> Self::Target { + self + } +} + +impl HasBuilder<'static> for PhysicalDeviceShaderInstrumentationPropertiesARM { + type Builder = PhysicalDeviceShaderInstrumentationPropertiesARMBuilder; +} + +/// A builder for a [`PhysicalDeviceShaderInstrumentationPropertiesARM`]. +#[repr(transparent)] +#[derive(Copy, Clone, Debug, Default)] +pub struct PhysicalDeviceShaderInstrumentationPropertiesARMBuilder { + value: PhysicalDeviceShaderInstrumentationPropertiesARM, +} + +impl PhysicalDeviceShaderInstrumentationPropertiesARMBuilder { + #[inline] + pub fn num_metrics(mut self, num_metrics: u32) -> Self { + self.value.num_metrics = num_metrics; + self + } + + #[inline] + pub fn per_basic_block_granularity(mut self, per_basic_block_granularity: bool) -> Self { + self.value.per_basic_block_granularity = per_basic_block_granularity as Bool32; + self + } + + #[inline] + pub fn build(self) -> PhysicalDeviceShaderInstrumentationPropertiesARM { + self.value + } +} + +impl ops::Deref for PhysicalDeviceShaderInstrumentationPropertiesARMBuilder { + type Target = PhysicalDeviceShaderInstrumentationPropertiesARM; + + #[inline] + fn deref(&self) -> &Self::Target { + &self.value + } +} + +impl ops::DerefMut for PhysicalDeviceShaderInstrumentationPropertiesARMBuilder { + #[inline] + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.value + } +} + +unsafe impl Cast for PhysicalDeviceShaderInstrumentationPropertiesARMBuilder { + type Target = PhysicalDeviceShaderInstrumentationPropertiesARM; + + #[inline] + fn into(self) -> Self::Target { + self.value + } +} + unsafe impl Cast for PhysicalDeviceShaderIntegerDotProductFeatures { type Target = PhysicalDeviceShaderIntegerDotProductFeatures; @@ -83974,14 +84099,9 @@ pub struct RenderPassPerformanceCountersByRegionBeginInfoARMBuilder<'b> { impl<'b> RenderPassPerformanceCountersByRegionBeginInfoARMBuilder<'b> { #[inline] - pub fn counter_address_count(mut self, counter_address_count: u32) -> Self { - self.value.counter_address_count = counter_address_count; - self - } - - #[inline] - pub fn counter_addresses(mut self, counter_addresses: &'b DeviceAddress) -> Self { - self.value.counter_addresses = counter_addresses as *const DeviceAddress; + pub fn counter_addresses(mut self, counter_addresses: &'b [DeviceAddress]) -> Self { + self.value.counter_address_count = counter_addresses.len() as u32; + self.value.counter_addresses = counter_addresses.as_ptr(); self } @@ -83992,14 +84112,9 @@ impl<'b> RenderPassPerformanceCountersByRegionBeginInfoARMBuilder<'b> { } #[inline] - pub fn counter_index_count(mut self, counter_index_count: u32) -> Self { - self.value.counter_index_count = counter_index_count; - self - } - - #[inline] - pub fn counter_indices(mut self, counter_indices: &'b mut u32) -> Self { - self.value.counter_indices = counter_indices as *mut u32; + pub fn counter_indices(mut self, counter_indices: &'b mut [u32]) -> Self { + self.value.counter_index_count = counter_indices.len() as u32; + self.value.counter_indices = counter_indices.as_mut_ptr(); self } @@ -88265,6 +88380,201 @@ unsafe impl Cast for ShaderDescriptorSetAndBindingMappingInfoEXTBuilder<'_> { } } +unsafe impl Cast for ShaderInstrumentationCreateInfoARM { + type Target = ShaderInstrumentationCreateInfoARM; + + #[inline] + fn into(self) -> Self::Target { + self + } +} + +impl HasBuilder<'static> for ShaderInstrumentationCreateInfoARM { + type Builder = ShaderInstrumentationCreateInfoARMBuilder; +} + +/// A builder for a [`ShaderInstrumentationCreateInfoARM`]. +#[repr(transparent)] +#[derive(Copy, Clone, Debug, Default)] +pub struct ShaderInstrumentationCreateInfoARMBuilder { + value: ShaderInstrumentationCreateInfoARM, +} + +impl ShaderInstrumentationCreateInfoARMBuilder { + #[inline] + pub fn build(self) -> ShaderInstrumentationCreateInfoARM { + self.value + } +} + +impl ops::Deref for ShaderInstrumentationCreateInfoARMBuilder { + type Target = ShaderInstrumentationCreateInfoARM; + + #[inline] + fn deref(&self) -> &Self::Target { + &self.value + } +} + +impl ops::DerefMut for ShaderInstrumentationCreateInfoARMBuilder { + #[inline] + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.value + } +} + +unsafe impl Cast for ShaderInstrumentationCreateInfoARMBuilder { + type Target = ShaderInstrumentationCreateInfoARM; + + #[inline] + fn into(self) -> Self::Target { + self.value + } +} + +unsafe impl Cast for ShaderInstrumentationMetricDataHeaderARM { + type Target = ShaderInstrumentationMetricDataHeaderARM; + + #[inline] + fn into(self) -> Self::Target { + self + } +} + +impl HasBuilder<'static> for ShaderInstrumentationMetricDataHeaderARM { + type Builder = ShaderInstrumentationMetricDataHeaderARMBuilder; +} + +/// A builder for a [`ShaderInstrumentationMetricDataHeaderARM`]. +#[repr(transparent)] +#[derive(Copy, Clone, Debug, Default)] +pub struct ShaderInstrumentationMetricDataHeaderARMBuilder { + value: ShaderInstrumentationMetricDataHeaderARM, +} + +impl ShaderInstrumentationMetricDataHeaderARMBuilder { + #[inline] + pub fn result_index(mut self, result_index: u32) -> Self { + self.value.result_index = result_index; + self + } + + #[inline] + pub fn result_sub_index(mut self, result_sub_index: u32) -> Self { + self.value.result_sub_index = result_sub_index; + self + } + + #[inline] + pub fn stages(mut self, stages: ShaderStageFlags) -> Self { + self.value.stages = stages; + self + } + + #[inline] + pub fn basic_block_index(mut self, basic_block_index: u32) -> Self { + self.value.basic_block_index = basic_block_index; + self + } + + #[inline] + pub fn build(self) -> ShaderInstrumentationMetricDataHeaderARM { + self.value + } +} + +impl ops::Deref for ShaderInstrumentationMetricDataHeaderARMBuilder { + type Target = ShaderInstrumentationMetricDataHeaderARM; + + #[inline] + fn deref(&self) -> &Self::Target { + &self.value + } +} + +impl ops::DerefMut for ShaderInstrumentationMetricDataHeaderARMBuilder { + #[inline] + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.value + } +} + +unsafe impl Cast for ShaderInstrumentationMetricDataHeaderARMBuilder { + type Target = ShaderInstrumentationMetricDataHeaderARM; + + #[inline] + fn into(self) -> Self::Target { + self.value + } +} + +unsafe impl Cast for ShaderInstrumentationMetricDescriptionARM { + type Target = ShaderInstrumentationMetricDescriptionARM; + + #[inline] + fn into(self) -> Self::Target { + self + } +} + +impl HasBuilder<'static> for ShaderInstrumentationMetricDescriptionARM { + type Builder = ShaderInstrumentationMetricDescriptionARMBuilder; +} + +/// A builder for a [`ShaderInstrumentationMetricDescriptionARM`]. +#[repr(transparent)] +#[derive(Copy, Clone, Debug, Default)] +pub struct ShaderInstrumentationMetricDescriptionARMBuilder { + value: ShaderInstrumentationMetricDescriptionARM, +} + +impl ShaderInstrumentationMetricDescriptionARMBuilder { + #[inline] + pub fn name(mut self, name: impl Into>) -> Self { + self.value.name = name.into(); + self + } + + #[inline] + pub fn description( + mut self, + description: impl Into>, + ) -> Self { + self.value.description = description.into(); + self + } + + #[inline] + pub fn build(self) -> ShaderInstrumentationMetricDescriptionARM { + self.value + } +} + +impl ops::Deref for ShaderInstrumentationMetricDescriptionARMBuilder { + type Target = ShaderInstrumentationMetricDescriptionARM; + + #[inline] + fn deref(&self) -> &Self::Target { + &self.value + } +} + +impl ops::DerefMut for ShaderInstrumentationMetricDescriptionARMBuilder { + #[inline] + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.value + } +} + +unsafe impl Cast for ShaderInstrumentationMetricDescriptionARMBuilder { + type Target = ShaderInstrumentationMetricDescriptionARM; + + #[inline] + fn into(self) -> Self::Target { + self.value + } +} + /// A Vulkan struct that can be used to extend a [`ShaderModuleCreateInfo`]. pub unsafe trait ExtendsShaderModuleCreateInfo: fmt::Debug {} unsafe impl ExtendsShaderModuleCreateInfo for ShaderModuleValidationCacheCreateInfoEXT {} diff --git a/vulkanalia/src/vk/chains.rs b/vulkanalia/src/vk/chains.rs index 33a199d4..b702e546 100644 --- a/vulkanalia/src/vk/chains.rs +++ b/vulkanalia/src/vk/chains.rs @@ -13370,6 +13370,49 @@ unsafe impl OutputChainStruct for PhysicalDeviceShaderImageFootprintFeaturesNV { } } +unsafe impl InputChainStruct for PhysicalDeviceShaderInstrumentationFeaturesARM { + const TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_FEATURES_ARM; + + #[inline] + fn s_type(&self) -> StructureType { + self.s_type + } + + #[inline] + fn next(&self) -> *const c_void { + self.next + } +} + +unsafe impl OutputChainStruct for PhysicalDeviceShaderInstrumentationFeaturesARM { + #[inline] + fn next_mut(&self) -> *mut c_void { + self.next + } +} + +unsafe impl InputChainStruct for PhysicalDeviceShaderInstrumentationPropertiesARM { + const TYPE: StructureType = + StructureType::PHYSICAL_DEVICE_SHADER_INSTRUMENTATION_PROPERTIES_ARM; + + #[inline] + fn s_type(&self) -> StructureType { + self.s_type + } + + #[inline] + fn next(&self) -> *const c_void { + self.next + } +} + +unsafe impl OutputChainStruct for PhysicalDeviceShaderInstrumentationPropertiesARM { + #[inline] + fn next_mut(&self) -> *mut c_void { + self.next + } +} + unsafe impl InputChainStruct for PhysicalDeviceShaderIntegerDotProductFeatures { const TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES; @@ -17620,6 +17663,48 @@ unsafe impl InputChainStruct for ShaderDescriptorSetAndBindingMappingInfoEXT { } } +unsafe impl InputChainStruct for ShaderInstrumentationCreateInfoARM { + const TYPE: StructureType = StructureType::SHADER_INSTRUMENTATION_CREATE_INFO_ARM; + + #[inline] + fn s_type(&self) -> StructureType { + self.s_type + } + + #[inline] + fn next(&self) -> *const c_void { + self.next + } +} + +unsafe impl OutputChainStruct for ShaderInstrumentationCreateInfoARM { + #[inline] + fn next_mut(&self) -> *mut c_void { + self.next + } +} + +unsafe impl InputChainStruct for ShaderInstrumentationMetricDescriptionARM { + const TYPE: StructureType = StructureType::SHADER_INSTRUMENTATION_METRIC_DESCRIPTION_ARM; + + #[inline] + fn s_type(&self) -> StructureType { + self.s_type + } + + #[inline] + fn next(&self) -> *const c_void { + self.next + } +} + +unsafe impl OutputChainStruct for ShaderInstrumentationMetricDescriptionARM { + #[inline] + fn next_mut(&self) -> *mut c_void { + self.next + } +} + unsafe impl InputChainStruct for ShaderModuleCreateInfo { const TYPE: StructureType = StructureType::SHADER_MODULE_CREATE_INFO; diff --git a/vulkanalia/src/vk/commands.rs b/vulkanalia/src/vk/commands.rs index 925dcf37..0798a873 100644 --- a/vulkanalia/src/vk/commands.rs +++ b/vulkanalia/src/vk/commands.rs @@ -51,6 +51,7 @@ pub struct DeviceCommands { pub bind_video_session_memory_khr: PFN_vkBindVideoSessionMemoryKHR, pub build_acceleration_structures_khr: PFN_vkBuildAccelerationStructuresKHR, pub build_micromaps_ext: PFN_vkBuildMicromapsEXT, + pub clear_shader_instrumentation_metrics_arm: PFN_vkClearShaderInstrumentationMetricsARM, pub cmd_begin_conditional_rendering_ext: PFN_vkCmdBeginConditionalRenderingEXT, pub cmd_begin_custom_resolve_ext: PFN_vkCmdBeginCustomResolveEXT, pub cmd_begin_per_tile_execution_qcom: PFN_vkCmdBeginPerTileExecutionQCOM, @@ -61,6 +62,7 @@ pub struct DeviceCommands { pub cmd_begin_render_pass2_khr: PFN_vkCmdBeginRenderPass2KHR, pub cmd_begin_rendering: PFN_vkCmdBeginRendering, pub cmd_begin_rendering_khr: PFN_vkCmdBeginRenderingKHR, + pub cmd_begin_shader_instrumentation_arm: PFN_vkCmdBeginShaderInstrumentationARM, pub cmd_begin_transform_feedback_ext: PFN_vkCmdBeginTransformFeedbackEXT, pub cmd_begin_video_coding_khr: PFN_vkCmdBeginVideoCodingKHR, pub cmd_bind_descriptor_buffer_embedded_samplers2_ext: @@ -182,6 +184,7 @@ pub struct DeviceCommands { pub cmd_end_rendering2_ext: PFN_vkCmdEndRendering2EXT, pub cmd_end_rendering2_khr: PFN_vkCmdEndRendering2KHR, pub cmd_end_rendering_khr: PFN_vkCmdEndRenderingKHR, + pub cmd_end_shader_instrumentation_arm: PFN_vkCmdEndShaderInstrumentationARM, pub cmd_end_transform_feedback_ext: PFN_vkCmdEndTransformFeedbackEXT, pub cmd_end_video_coding_khr: PFN_vkCmdEndVideoCodingKHR, pub cmd_execute_commands: PFN_vkCmdExecuteCommands, @@ -408,6 +411,7 @@ pub struct DeviceCommands { pub create_sampler_ycbcr_conversion_khr: PFN_vkCreateSamplerYcbcrConversionKHR, pub create_semaphore: PFN_vkCreateSemaphore, pub create_semaphore_sci_sync_pool_nv: PFN_vkCreateSemaphoreSciSyncPoolNV, + pub create_shader_instrumentation_arm: PFN_vkCreateShaderInstrumentationARM, pub create_shader_module: PFN_vkCreateShaderModule, pub create_shaders_ext: PFN_vkCreateShadersEXT, pub create_shared_swapchains_khr: PFN_vkCreateSharedSwapchainsKHR, @@ -462,6 +466,7 @@ pub struct DeviceCommands { pub destroy_semaphore: PFN_vkDestroySemaphore, pub destroy_semaphore_sci_sync_pool_nv: PFN_vkDestroySemaphoreSciSyncPoolNV, pub destroy_shader_ext: PFN_vkDestroyShaderEXT, + pub destroy_shader_instrumentation_arm: PFN_vkDestroyShaderInstrumentationARM, pub destroy_shader_module: PFN_vkDestroyShaderModule, pub destroy_swapchain_khr: PFN_vkDestroySwapchainKHR, pub destroy_tensor_arm: PFN_vkDestroyTensorARM, @@ -639,6 +644,7 @@ pub struct DeviceCommands { pub get_semaphore_zircon_handle_fuchsia: PFN_vkGetSemaphoreZirconHandleFUCHSIA, pub get_shader_binary_data_ext: PFN_vkGetShaderBinaryDataEXT, pub get_shader_info_amd: PFN_vkGetShaderInfoAMD, + pub get_shader_instrumentation_values_arm: PFN_vkGetShaderInstrumentationValuesARM, pub get_shader_module_create_info_identifier_ext: PFN_vkGetShaderModuleCreateInfoIdentifierEXT, pub get_shader_module_identifier_ext: PFN_vkGetShaderModuleIdentifierEXT, pub get_swapchain_counter_ext: PFN_vkGetSwapchainCounterEXT, @@ -1095,6 +1101,20 @@ impl DeviceCommands { fallback } }, + clear_shader_instrumentation_metrics_arm: { + let value = loader(c"vkClearShaderInstrumentationMetricsARM".as_ptr()); + if let Some(value) = value { + mem::transmute(value) + } else { + unsafe extern "system" fn fallback( + _device: Device, + _instrumentation: ShaderInstrumentationARM, + ) { + panic!("could not load vkClearShaderInstrumentationMetricsARM") + } + fallback + } + }, cmd_begin_conditional_rendering_ext: { let value = loader(c"vkCmdBeginConditionalRenderingEXT".as_ptr()); if let Some(value) = value { @@ -1243,6 +1263,20 @@ impl DeviceCommands { fallback } }, + cmd_begin_shader_instrumentation_arm: { + let value = loader(c"vkCmdBeginShaderInstrumentationARM".as_ptr()); + if let Some(value) = value { + mem::transmute(value) + } else { + unsafe extern "system" fn fallback( + _command_buffer: CommandBuffer, + _instrumentation: ShaderInstrumentationARM, + ) { + panic!("could not load vkCmdBeginShaderInstrumentationARM") + } + fallback + } + }, cmd_begin_transform_feedback_ext: { let value = loader(c"vkCmdBeginTransformFeedbackEXT".as_ptr()); if let Some(value) = value { @@ -3040,6 +3074,17 @@ impl DeviceCommands { fallback } }, + cmd_end_shader_instrumentation_arm: { + let value = loader(c"vkCmdEndShaderInstrumentationARM".as_ptr()); + if let Some(value) = value { + mem::transmute(value) + } else { + unsafe extern "system" fn fallback(_command_buffer: CommandBuffer) { + panic!("could not load vkCmdEndShaderInstrumentationARM") + } + fallback + } + }, cmd_end_transform_feedback_ext: { let value = loader(c"vkCmdEndTransformFeedbackEXT".as_ptr()); if let Some(value) = value { @@ -6424,6 +6469,22 @@ impl DeviceCommands { fallback } }, + create_shader_instrumentation_arm: { + let value = loader(c"vkCreateShaderInstrumentationARM".as_ptr()); + if let Some(value) = value { + mem::transmute(value) + } else { + unsafe extern "system" fn fallback( + _device: Device, + _create_info: *const ShaderInstrumentationCreateInfoARM, + _allocator: *const AllocationCallbacks, + _instrumentation: *mut ShaderInstrumentationARM, + ) -> Result { + panic!("could not load vkCreateShaderInstrumentationARM") + } + fallback + } + }, create_shader_module: { let value = loader(c"vkCreateShaderModule".as_ptr()); if let Some(value) = value { @@ -7241,6 +7302,21 @@ impl DeviceCommands { fallback } }, + destroy_shader_instrumentation_arm: { + let value = loader(c"vkDestroyShaderInstrumentationARM".as_ptr()); + if let Some(value) = value { + mem::transmute(value) + } else { + unsafe extern "system" fn fallback( + _device: Device, + _instrumentation: ShaderInstrumentationARM, + _allocator: *const AllocationCallbacks, + ) { + panic!("could not load vkDestroyShaderInstrumentationARM") + } + fallback + } + }, destroy_shader_module: { let value = loader(c"vkDestroyShaderModule".as_ptr()); if let Some(value) = value { @@ -9625,6 +9701,23 @@ impl DeviceCommands { fallback } }, + get_shader_instrumentation_values_arm: { + let value = loader(c"vkGetShaderInstrumentationValuesARM".as_ptr()); + if let Some(value) = value { + mem::transmute(value) + } else { + unsafe extern "system" fn fallback( + _device: Device, + _instrumentation: ShaderInstrumentationARM, + _metric_block_count: *mut u32, + _metric_values: *mut c_void, + _flags: ShaderInstrumentationValuesFlagsARM, + ) -> Result { + panic!("could not load vkGetShaderInstrumentationValuesARM") + } + fallback + } + }, get_shader_module_create_info_identifier_ext: { let value = loader(c"vkGetShaderModuleCreateInfoIdentifierEXT".as_ptr()); if let Some(value) = value { @@ -11092,6 +11185,8 @@ pub struct InstanceCommands { PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceCountersByRegionARM, pub enumerate_physical_device_queue_family_performance_query_counters_khr: PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR, + pub enumerate_physical_device_shader_instrumentation_metrics_arm: + PFN_vkEnumeratePhysicalDeviceShaderInstrumentationMetricsARM, pub enumerate_physical_devices: PFN_vkEnumeratePhysicalDevices, pub get_device_proc_addr: PFN_vkGetDeviceProcAddr, pub get_display_mode_properties2_khr: PFN_vkGetDisplayModeProperties2KHR, @@ -11830,6 +11925,22 @@ impl InstanceCommands { fallback } }, + enumerate_physical_device_shader_instrumentation_metrics_arm: { + let value = + loader(c"vkEnumeratePhysicalDeviceShaderInstrumentationMetricsARM".as_ptr()); + if let Some(value) = value { + mem::transmute(value) + } else { + unsafe extern "system" fn fallback( + _physical_device: PhysicalDevice, + _description_count: *mut u32, + _descriptions: *mut ShaderInstrumentationMetricDescriptionARM, + ) -> Result { + panic!("could not load vkEnumeratePhysicalDeviceShaderInstrumentationMetricsARM") + } + fallback + } + }, enumerate_physical_devices: { let value = loader(c"vkEnumeratePhysicalDevices".as_ptr()); if let Some(value) = value { diff --git a/vulkanalia/src/vk/extensions.rs b/vulkanalia/src/vk/extensions.rs index 0884b480..360982f8 100644 --- a/vulkanalia/src/vk/extensions.rs +++ b/vulkanalia/src/vk/extensions.rs @@ -724,6 +724,143 @@ pub trait ArmPerformanceCountersByRegionExtensionInstanceCommands: InstanceV1_0 impl ArmPerformanceCountersByRegionExtensionInstanceCommands for C {} +/// The device-level commands added by [`ARM_SHADER_INSTRUMENTATION_EXTENSION`]. +pub trait ArmShaderInstrumentationExtensionDeviceCommands: DeviceV1_0 { + /// + #[inline] + unsafe fn clear_shader_instrumentation_metrics_arm( + &self, + instrumentation: ShaderInstrumentationARM, + ) { + let __result = (self.commands().clear_shader_instrumentation_metrics_arm)( + self.handle(), + instrumentation, + ); + } + + /// + #[inline] + unsafe fn cmd_begin_shader_instrumentation_arm( + &self, + command_buffer: CommandBuffer, + instrumentation: ShaderInstrumentationARM, + ) { + let __result = + (self.commands().cmd_begin_shader_instrumentation_arm)(command_buffer, instrumentation); + } + + /// + #[inline] + unsafe fn cmd_end_shader_instrumentation_arm(&self, command_buffer: CommandBuffer) { + let __result = (self.commands().cmd_end_shader_instrumentation_arm)(command_buffer); + } + + /// + #[inline] + unsafe fn create_shader_instrumentation_arm( + &self, + create_info: &ShaderInstrumentationCreateInfoARM, + allocator: Option<&AllocationCallbacks>, + ) -> crate::VkResult { + let mut instrumentation = MaybeUninit::::uninit(); + + let __result = (self.commands().create_shader_instrumentation_arm)( + self.handle(), + create_info, + allocator.map_or(ptr::null(), |v| v), + instrumentation.as_mut_ptr(), + ); + + if __result == Result::SUCCESS { + Ok(instrumentation.assume_init()) + } else { + Err(__result.into()) + } + } + + /// + #[inline] + unsafe fn destroy_shader_instrumentation_arm( + &self, + instrumentation: ShaderInstrumentationARM, + allocator: Option<&AllocationCallbacks>, + ) { + let __result = (self.commands().destroy_shader_instrumentation_arm)( + self.handle(), + instrumentation, + allocator.map_or(ptr::null(), |v| v), + ); + } + + /// + #[inline] + unsafe fn get_shader_instrumentation_values_arm( + &self, + instrumentation: ShaderInstrumentationARM, + metric_values: *mut c_void, + flags: ShaderInstrumentationValuesFlagsARM, + ) -> crate::VkResult { + let mut metric_block_count = MaybeUninit::::uninit(); + + let __result = (self.commands().get_shader_instrumentation_values_arm)( + self.handle(), + instrumentation, + metric_block_count.as_mut_ptr(), + metric_values, + flags, + ); + + if __result == Result::SUCCESS { + Ok(metric_block_count.assume_init()) + } else { + Err(__result.into()) + } + } +} + +impl ArmShaderInstrumentationExtensionDeviceCommands for C {} + +/// The instance-level commands added by [`ARM_SHADER_INSTRUMENTATION_EXTENSION`]. +pub trait ArmShaderInstrumentationExtensionInstanceCommands: InstanceV1_0 { + /// + #[inline] + unsafe fn enumerate_physical_device_shader_instrumentation_metrics_arm( + &self, + physical_device: PhysicalDevice, + ) -> crate::VkResult> { + let mut description_count = 0; + + (self + .commands() + .enumerate_physical_device_shader_instrumentation_metrics_arm)( + physical_device, + &mut description_count, + ptr::null_mut(), + ); + + let mut descriptions = Vec::with_capacity(description_count as usize); + + let __result = (self + .commands() + .enumerate_physical_device_shader_instrumentation_metrics_arm)( + physical_device, + &mut description_count, + descriptions.as_mut_ptr(), + ); + + debug_assert!(descriptions.capacity() >= description_count as usize); + descriptions.set_len(description_count as usize); + + if __result == Result::SUCCESS { + Ok(descriptions) + } else { + Err(__result.into()) + } + } +} + +impl ArmShaderInstrumentationExtensionInstanceCommands for C {} + /// The device-level commands added by [`ARM_TENSORS_EXTENSION`]. pub trait ArmTensorsExtensionDeviceCommands: DeviceV1_0 { ///