• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     fns: vk::KhrBufferDeviceAddressFn,
10 }
11 
12 impl BufferDeviceAddress {
new(instance: &Instance, device: &Device) -> Self13     pub fn new(instance: &Instance, device: &Device) -> Self {
14         let fns = vk::KhrBufferDeviceAddressFn::load(|name| unsafe {
15             mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
16         });
17         Self {
18             handle: device.handle(),
19             fns,
20         }
21     }
22 
23     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferDeviceAddressKHR.html>"]
get_buffer_device_address( &self, info: &vk::BufferDeviceAddressInfoKHR, ) -> vk::DeviceAddress24     pub unsafe fn get_buffer_device_address(
25         &self,
26         info: &vk::BufferDeviceAddressInfoKHR,
27     ) -> vk::DeviceAddress {
28         self.fns.get_buffer_device_address_khr(self.handle, info)
29     }
30 
31     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetBufferOpaqueCaptureAddressKHR.html>"]
get_buffer_opaque_capture_address( &self, info: &vk::BufferDeviceAddressInfoKHR, ) -> u6432     pub unsafe fn get_buffer_opaque_capture_address(
33         &self,
34         info: &vk::BufferDeviceAddressInfoKHR,
35     ) -> u64 {
36         self.fns
37             .get_buffer_opaque_capture_address_khr(self.handle, info)
38     }
39 
40     #[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, ) -> u6441     pub unsafe fn get_device_memory_opaque_capture_address(
42         &self,
43         info: &vk::DeviceMemoryOpaqueCaptureAddressInfoKHR,
44     ) -> u64 {
45         self.fns
46             .get_device_memory_opaque_capture_address_khr(self.handle, info)
47     }
48 
name() -> &'static CStr49     pub fn name() -> &'static CStr {
50         vk::KhrBufferDeviceAddressFn::name()
51     }
52 
fp(&self) -> &vk::KhrBufferDeviceAddressFn53     pub fn fp(&self) -> &vk::KhrBufferDeviceAddressFn {
54         &self.fns
55     }
56 
device(&self) -> vk::Device57     pub fn device(&self) -> vk::Device {
58         self.handle
59     }
60 }
61