1 use crate::vk;
2 use crate::{Device, Instance};
3 use std::ffi::CStr;
4 use std::mem;
5 
6 #[derive(Clone)]
7 pub struct BufferDeviceAddress {
8     handle: vk::Device,
9     fp: vk::KhrBufferDeviceAddressFn,
10 }
11 
12 impl BufferDeviceAddress {
new(instance: &Instance, device: &Device) -> Self13     pub fn new(instance: &Instance, device: &Device) -> Self {
14         let handle = device.handle();
15         let fp = vk::KhrBufferDeviceAddressFn::load(|name| unsafe {
16             mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
17         });
18         Self { handle, fp }
19     }
20 
21     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferDeviceAddressKHR.html>"]
get_buffer_device_address( &self, info: &vk::BufferDeviceAddressInfoKHR, ) -> vk::DeviceAddress22     pub unsafe fn get_buffer_device_address(
23         &self,
24         info: &vk::BufferDeviceAddressInfoKHR,
25     ) -> vk::DeviceAddress {
26         self.fp.get_buffer_device_address_khr(self.handle, info)
27     }
28 
29     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferOpaqueCaptureAddressKHR.html>"]
get_buffer_opaque_capture_address( &self, info: &vk::BufferDeviceAddressInfoKHR, ) -> u6430     pub unsafe fn get_buffer_opaque_capture_address(
31         &self,
32         info: &vk::BufferDeviceAddressInfoKHR,
33     ) -> u64 {
34         self.fp
35             .get_buffer_opaque_capture_address_khr(self.handle, info)
36     }
37 
38     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceMemoryOpaqueCaptureAddressKHR.html>"]
get_device_memory_opaque_capture_address( &self, info: &vk::DeviceMemoryOpaqueCaptureAddressInfoKHR, ) -> u6439     pub unsafe fn get_device_memory_opaque_capture_address(
40         &self,
41         info: &vk::DeviceMemoryOpaqueCaptureAddressInfoKHR,
42     ) -> u64 {
43         self.fp
44             .get_device_memory_opaque_capture_address_khr(self.handle, info)
45     }
46 
name() -> &'static CStr47     pub fn name() -> &'static CStr {
48         vk::KhrBufferDeviceAddressFn::name()
49     }
50 
fp(&self) -> &vk::KhrBufferDeviceAddressFn51     pub fn fp(&self) -> &vk::KhrBufferDeviceAddressFn {
52         &self.fp
53     }
54 
device(&self) -> vk::Device55     pub fn device(&self) -> vk::Device {
56         self.handle
57     }
58 }
59