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}