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