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