ash/extensions/nv/
device_diagnostic_checkpoints.rs1use crate::vk;
2use crate::{Device, Instance};
3use std::ffi::CStr;
4use std::mem;
5use std::os::raw::c_void;
6
7#[derive(Clone)]
9pub struct DeviceDiagnosticCheckpoints {
10 fp: vk::NvDeviceDiagnosticCheckpointsFn,
11}
12
13impl DeviceDiagnosticCheckpoints {
14 pub fn new(instance: &Instance, device: &Device) -> Self {
15 let fp = vk::NvDeviceDiagnosticCheckpointsFn::load(|name| unsafe {
16 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
17 });
18 Self { fp }
19 }
20
21 #[inline]
23 pub unsafe fn cmd_set_checkpoint(
24 &self,
25 command_buffer: vk::CommandBuffer,
26 p_checkpoint_marker: *const c_void,
27 ) {
28 (self.fp.cmd_set_checkpoint_nv)(command_buffer, p_checkpoint_marker);
29 }
30
31 #[inline]
33 pub unsafe fn get_queue_checkpoint_data_len(&self, queue: vk::Queue) -> usize {
34 let mut count = 0;
35 (self.fp.get_queue_checkpoint_data_nv)(queue, &mut count, std::ptr::null_mut());
36 count as usize
37 }
38
39 #[inline]
44 pub unsafe fn get_queue_checkpoint_data(
45 &self,
46 queue: vk::Queue,
47 out: &mut [vk::CheckpointDataNV],
48 ) {
49 let mut count = out.len() as u32;
50 (self.fp.get_queue_checkpoint_data_nv)(queue, &mut count, out.as_mut_ptr());
51 assert_eq!(count as usize, out.len());
52 }
53
54 #[inline]
55 pub const fn name() -> &'static CStr {
56 vk::NvDeviceDiagnosticCheckpointsFn::name()
57 }
58
59 #[inline]
60 pub fn fp(&self) -> &vk::NvDeviceDiagnosticCheckpointsFn {
61 &self.fp
62 }
63}