winsafe\dxgi\com_interfaces/
idxgidevice.rs1#![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 }
18
19impl dxgi_IDXGIObject for IDXGIDevice {}
20impl dxgi_IDXGIDevice for IDXGIDevice {}
21
22pub trait dxgi_IDXGIDevice: dxgi_IDXGIObject {
31 #[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 }
60
61 #[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 #[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 fn SetGPUThreadPriority(&self, priority: i8) -> HrResult<()> {
94 HrRet(unsafe {
95 (vt::<IDXGIDeviceVT>(self).SetGPUThreadPriority)(self.ptr(), priority as _)
96 }).to_hrresult()
97 }
98}