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::ExtBufferDeviceAddressFn, 10 } 11 12 impl BufferDeviceAddress { new(instance: &Instance, device: &Device) -> Self13 pub fn new(instance: &Instance, device: &Device) -> Self { 14 let fns = vk::ExtBufferDeviceAddressFn::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/vkGetBufferDeviceAddressEXT.html>"] get_buffer_device_address( &self, info: &vk::BufferDeviceAddressInfoEXT, ) -> vk::DeviceAddress24 pub unsafe fn get_buffer_device_address( 25 &self, 26 info: &vk::BufferDeviceAddressInfoEXT, 27 ) -> vk::DeviceAddress { 28 self.fns.get_buffer_device_address_ext(self.handle, info) 29 } 30 name() -> &'static CStr31 pub fn name() -> &'static CStr { 32 vk::ExtBufferDeviceAddressFn::name() 33 } 34 fp(&self) -> &vk::ExtBufferDeviceAddressFn35 pub fn fp(&self) -> &vk::ExtBufferDeviceAddressFn { 36 &self.fns 37 } 38 device(&self) -> vk::Device39 pub fn device(&self) -> vk::Device { 40 self.handle 41 } 42 } 43