ash/extensions/khr/
performance_query.rs1use crate::prelude::*;
4use crate::vk;
5use core::mem;
6use core::ptr;
7
8impl crate::khr::performance_query::Device {
9 #[inline]
11 pub unsafe fn acquire_profiling_lock(
12 &self,
13 info: &vk::AcquireProfilingLockInfoKHR<'_>,
14 ) -> VkResult<()> {
15 (self.fp.acquire_profiling_lock_khr)(self.handle, info).result()
16 }
17
18 #[inline]
20 pub unsafe fn release_profiling_lock(&self) {
21 (self.fp.release_profiling_lock_khr)(self.handle)
22 }
23}
24
25impl crate::khr::performance_query::Instance {
26 #[inline]
28 pub unsafe fn enumerate_physical_device_queue_family_performance_query_counters_len(
29 &self,
30 physical_device: vk::PhysicalDevice,
31 queue_family_index: u32,
32 ) -> VkResult<usize> {
33 let mut count = mem::MaybeUninit::uninit();
34 (self
35 .fp
36 .enumerate_physical_device_queue_family_performance_query_counters_khr)(
37 physical_device,
38 queue_family_index,
39 count.as_mut_ptr(),
40 ptr::null_mut(),
41 ptr::null_mut(),
42 )
43 .assume_init_on_success(count)
44 .map(|c| c as usize)
45 }
46
47 #[inline]
52 pub unsafe fn enumerate_physical_device_queue_family_performance_query_counters(
53 &self,
54 physical_device: vk::PhysicalDevice,
55 queue_family_index: u32,
56 out_counters: &mut [vk::PerformanceCounterKHR<'_>],
57 out_counter_descriptions: &mut [vk::PerformanceCounterDescriptionKHR<'_>],
58 ) -> VkResult<()> {
59 assert_eq!(out_counters.len(), out_counter_descriptions.len());
60 let mut count = out_counters.len() as u32;
61 (self
62 .fp
63 .enumerate_physical_device_queue_family_performance_query_counters_khr)(
64 physical_device,
65 queue_family_index,
66 &mut count,
67 out_counters.as_mut_ptr(),
68 out_counter_descriptions.as_mut_ptr(),
69 )
70 .result()?;
71 assert_eq!(count as usize, out_counters.len());
72 assert_eq!(count as usize, out_counter_descriptions.len());
73 Ok(())
74 }
75
76 #[inline]
78 pub unsafe fn get_physical_device_queue_family_performance_query_passes(
79 &self,
80 physical_device: vk::PhysicalDevice,
81 performance_query_create_info: &vk::QueryPoolPerformanceCreateInfoKHR<'_>,
82 ) -> u32 {
83 let mut num_passes = mem::MaybeUninit::uninit();
84 (self
85 .fp
86 .get_physical_device_queue_family_performance_query_passes_khr)(
87 physical_device,
88 performance_query_create_info,
89 num_passes.as_mut_ptr(),
90 );
91 num_passes.assume_init()
92 }
93}