Skip to main content

d3d11/
device_child.rs

1use d3d11_ffi::{Direct3D::WKPDID_D3DDebugObjectName, Direct3D11::ID3D11DeviceChild};
2
3use crate::device::Device;
4
5pub trait DeviceChild {
6    fn as_device_child(&self) -> &ID3D11DeviceChild;
7
8    fn get_device(&self) -> Device {
9        unsafe {
10            let device = self.as_device_child().GetDevice().unwrap();
11            Device(device)
12        }
13    }
14
15    fn set_debug_name(&self, name: impl AsRef<str>) {
16        let name_cstr = std::ffi::CString::new(name.as_ref()).unwrap();
17        unsafe {
18            let _ = self.as_device_child().SetPrivateData(
19                &WKPDID_D3DDebugObjectName,
20                name_cstr.to_bytes().len() as _,
21                Some(name_cstr.as_ptr() as _),
22            );
23        }
24    }
25}
26
27#[macro_export]
28macro_rules! impl_device_child {
29    ($name:ident) => {
30        impl $crate::device_child::DeviceChild for $name {
31            fn as_device_child(&self) -> &d3d11_ffi::Direct3D11::ID3D11DeviceChild {
32                &self.0
33            }
34        }
35    };
36}