winsafe\dxgi\com_interfaces/
idxgidevice.rs

1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::co;
4use crate::decl::*;
5use crate::dxgi::vts::*;
6use crate::kernel::privs::*;
7use crate::ole::privs::*;
8use crate::prelude::*;
9
10com_interface! { IDXGIDevice: "54ec77fa-1377-44e6-8c32-88fd5f44c84c";
11	/// [`IDXGIDevice`](https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nn-dxgi-idxgidevice)
12	/// COM interface.
13	///
14	/// Automatically calls
15	/// [`Release`](https://learn.microsoft.com/en-us/windows/win32/api/unknwn/nf-unknwn-iunknown-release)
16	/// when the object goes out of scope.
17}
18
19impl dxgi_IDXGIObject for IDXGIDevice {}
20impl dxgi_IDXGIDevice for IDXGIDevice {}
21
22/// This trait is enabled with the `dxgi` feature, and provides methods for
23/// [`IDXGIDevice`](crate::IDXGIDevice).
24///
25/// Prefer importing this trait through the prelude:
26///
27/// ```no_run
28/// use winsafe::prelude::*;
29/// ```
30pub trait dxgi_IDXGIDevice: dxgi_IDXGIObject {
31	/// [`IDXGIDevice::CreateSurface`](https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgidevice-createsurface)
32	/// method.
33	#[must_use]
34	fn CreateSurface(
35		&self,
36		desc: &DXGI_SURFACE_DESC,
37		num_surfaces: u32,
38		usage: co::DXGI_USAGE,
39		shared_resource: Option<&DXGI_SHARED_RESOURCE>,
40	) -> HrResult<IDXGISurface> {
41		let mut queried = unsafe { IDXGISurface::null() };
42		HrRet(unsafe {
43			(vt::<IDXGIDeviceVT>(self).CreateSurface)(
44				self.ptr(),
45				pcvoid(desc),
46				num_surfaces,
47				usage.raw(),
48				pcvoid_or_null(shared_resource),
49				queried.as_mut(),
50			)
51		})
52		.to_hrresult()
53		.map(|_| queried)
54	}
55
56	fn_com_interface_get! { GetAdapter: IDXGIDeviceVT => IDXGIAdapter;
57		/// [`IDXGIDevice::GetAdapter`](https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgidevice-getadapter)
58		/// method.
59	}
60
61	/// [`IDXGIDevice::GetGPUThreadPriority`](https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgidevice-getgputhreadpriority)
62	/// method.
63	#[must_use]
64	fn GetGPUThreadPriority(&self) -> HrResult<i8> {
65		let mut priority = 0i32;
66		HrRet(unsafe {
67			(vt::<IDXGIDeviceVT>(self).GetGPUThreadPriority)(self.ptr(), &mut priority)
68		}).to_hrresult()
69		.map(|_| priority as _)
70	}
71
72	/// [`IDXGIDevice::QueryResourceResidency`](https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgidevice-queryresourceresidency)
73	/// method.
74	#[must_use]
75	fn QueryResourceResidency(
76		&self,
77		resources: &[&impl dxgi_IDXGIResource],
78	) -> HrResult<Vec<co::DXGI_RESIDENCY>> {
79		let mut status = vec![co::DXGI_RESIDENCY::default(); resources.len()];
80		HrRet(unsafe {
81			(vt::<IDXGIDeviceVT>(self).QueryResourceResidency)(
82				self.ptr(),
83				resources.as_ptr() as _,
84				status.as_mut_ptr() as _,
85				resources.len() as _,
86			)
87		}).to_hrresult()
88		.map(|_| status)
89	}
90
91	/// [`IDXGIDevice::SetGPUThreadPriority`](https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgidevice-setgputhreadpriority)
92	/// method.
93	fn SetGPUThreadPriority(&self, priority: i8) -> HrResult<()> {
94		HrRet(unsafe {
95			(vt::<IDXGIDeviceVT>(self).SetGPUThreadPriority)(self.ptr(), priority as _)
96		}).to_hrresult()
97	}
98}