jay_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 unsafe { (self.fp.acquire_profiling_lock_khr)(self.handle, info).result() }
16 }
17
18 #[inline]
20 pub unsafe fn release_profiling_lock(&self) {
21 unsafe { (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 unsafe {
34 let mut count = mem::MaybeUninit::uninit();
35 (self
36 .fp
37 .enumerate_physical_device_queue_family_performance_query_counters_khr)(
38 physical_device,
39 queue_family_index,
40 count.as_mut_ptr(),
41 ptr::null_mut(),
42 ptr::null_mut(),
43 )
44 .assume_init_on_success(count)
45 .map(|c| c as usize)
46 }
47 }
48
49 #[inline]
54 pub unsafe fn enumerate_physical_device_queue_family_performance_query_counters(
55 &self,
56 physical_device: vk::PhysicalDevice,
57 queue_family_index: u32,
58 out_counters: &mut [vk::PerformanceCounterKHR<'_>],
59 out_counter_descriptions: &mut [vk::PerformanceCounterDescriptionKHR<'_>],
60 ) -> VkResult<()> {
61 unsafe {
62 assert_eq!(out_counters.len(), out_counter_descriptions.len());
63 let mut count = out_counters.len() as u32;
64 (self
65 .fp
66 .enumerate_physical_device_queue_family_performance_query_counters_khr)(
67 physical_device,
68 queue_family_index,
69 &mut count,
70 out_counters.as_mut_ptr(),
71 out_counter_descriptions.as_mut_ptr(),
72 )
73 .result()?;
74 assert_eq!(count as usize, out_counters.len());
75 assert_eq!(count as usize, out_counter_descriptions.len());
76 Ok(())
77 }
78 }
79
80 #[inline]
82 pub unsafe fn get_physical_device_queue_family_performance_query_passes(
83 &self,
84 physical_device: vk::PhysicalDevice,
85 performance_query_create_info: &vk::QueryPoolPerformanceCreateInfoKHR<'_>,
86 ) -> u32 {
87 unsafe {
88 let mut num_passes = mem::MaybeUninit::uninit();
89 (self
90 .fp
91 .get_physical_device_queue_family_performance_query_passes_khr)(
92 physical_device,
93 performance_query_create_info,
94 num_passes.as_mut_ptr(),
95 );
96 num_passes.assume_init()
97 }
98 }
99}