winapi_ui_automation/shared/
dxgi1_3.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! Mappings for the contents of dxgi1_3.h
7use ctypes::c_void;
8use shared::dxgi::{IDXGIOutput, IDXGIResource};
9use shared::dxgi1_2::{
10    DXGI_SWAP_CHAIN_DESC1, IDXGIDevice2, IDXGIDevice2Vtbl, IDXGIFactory2, IDXGIFactory2Vtbl,
11    IDXGIOutput1, IDXGIOutput1Vtbl, IDXGISwapChain1, IDXGISwapChain1Vtbl,
12};
13use shared::dxgiformat::DXGI_FORMAT;
14use shared::guiddef::REFIID;
15use shared::minwindef::{BOOL, FLOAT, UINT};
16use shared::windef::RECT;
17use um::unknwnbase::{IUnknown, IUnknownVtbl};
18use um::winnt::{HANDLE, HRESULT, LARGE_INTEGER};
19ENUM!{enum DXGI_FRAME_PRESENTATION_MODE {
20    DXGI_FRAME_PRESENTATION_MODE_COMPOSED = 0,
21    DXGI_FRAME_PRESENTATION_MODE_OVERLAY = 1,
22    DXGI_FRAME_PRESENTATION_MODE_NONE = 2,
23    DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE = 3,
24}}
25ENUM!{enum DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS {
26    DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE = 0x1,
27    DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 = 0x2,
28    DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC = 0x4,
29}}
30ENUM!{enum DXGI_OVERLAY_SUPPORT_FLAG {
31    DXGI_OVERLAY_SUPPORT_FLAG_DIRECT = 0x1,
32    DXGI_OVERLAY_SUPPORT_FLAG_SCALING = 0x2,
33}}
34STRUCT!{struct DXGI_DECODE_SWAP_CHAIN_DESC {
35    Flags: UINT,
36}}
37STRUCT!{struct DXGI_FRAME_STATISTICS_MEDIA {
38    PresentCount: UINT,
39    PresentRefreshCount: UINT,
40    SyncRefreshCount: UINT,
41    SyncQPCTime: LARGE_INTEGER,
42    SyncGPUTime: LARGE_INTEGER,
43    CompositionMode: DXGI_FRAME_PRESENTATION_MODE,
44    ApprovedPresentDuration: UINT,
45}}
46STRUCT!{struct DXGI_MATRIX_3X2_F {
47    _11: FLOAT,
48    _12: FLOAT,
49    _21: FLOAT,
50    _22: FLOAT,
51    _31: FLOAT,
52    _32: FLOAT,
53}}
54RIDL!{#[uuid(0x2633066b, 0x4514, 0x4c7a, 0x8f, 0xd8, 0x12, 0xea, 0x98, 0x05, 0x9d, 0x18)]
55interface IDXGIDecodeSwapChain(IDXGIDecodeSwapChainVtbl): IUnknown(IUnknownVtbl) {
56    fn PresentBuffer(
57        BufferToPresent: UINT,
58        SyncInterval: UINT,
59        Flags: UINT,
60    ) -> HRESULT,
61    fn SetSourceRect(
62        pRect: *const RECT,
63    ) -> HRESULT,
64    fn SetTargetRect(
65        pRect: *const RECT,
66    ) -> HRESULT,
67    fn SetDestSize(
68        Width: UINT,
69        Height: UINT,
70    ) -> HRESULT,
71    fn GetSourceRect(
72        pRect: *mut RECT,
73    ) -> HRESULT,
74    fn GetTargetRect(
75        pRect: *mut RECT,
76    ) -> HRESULT,
77    fn GetDestSize(
78        pWidth: *mut UINT,
79        pHeight: *mut UINT,
80    ) -> HRESULT,
81    fn SetColorSpace(
82        ColorSpace: DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS,
83    ) -> HRESULT,
84    fn GetColorSpace() -> DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS,
85}}
86extern "system" {
87    pub fn CreateDXGIFactory2(
88        Flags: UINT,
89        riid: REFIID,
90        ppFactory: *mut *mut c_void,
91    ) -> HRESULT;
92    pub fn DXGIGetDebugInterface1(
93        Flags: UINT,
94        riid: REFIID,
95        pDebug: *mut *mut c_void,
96    ) -> HRESULT;
97}
98RIDL!{#[uuid(0x6007896c, 0x3244, 0x4afd, 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23)]
99interface IDXGIDevice3(IDXGIDevice3Vtbl): IDXGIDevice2(IDXGIDevice2Vtbl) {
100    fn Trim() -> (),
101}}
102RIDL!{#[uuid(0x25483823, 0xcd46, 0x4c7d, 0x86, 0xca, 0x47, 0xaa, 0x95, 0xb8, 0x37, 0xbd)]
103interface IDXGIFactory3(IDXGIFactory3Vtbl): IDXGIFactory2(IDXGIFactory2Vtbl) {
104    fn GetCreationFlags() -> UINT,
105}}
106RIDL!{#[uuid(0x41e7d1f2, 0xa591, 0x4f7b, 0xa2, 0xe5, 0xfa, 0x9c, 0x84, 0x3e, 0x1c, 0x12)]
107interface IDXGIFactoryMedia(IDXGIFactoryMediaVtbl): IUnknown(IUnknownVtbl) {
108    fn CreateSwapChainForCompositionSurfaceHandle(
109        pDevice: *mut IUnknown,
110        hSurface: HANDLE,
111        pDesc: *const DXGI_SWAP_CHAIN_DESC1,
112        pRestrictToOutput: *mut IDXGIOutput,
113        ppSwapChain: *mut *mut IDXGISwapChain1,
114    ) -> HRESULT,
115    fn CreateDecodeSwapChainForCompositionSurfaceHandle(
116        pDevice: *mut IUnknown,
117        hSurface: HANDLE,
118        pDesc: *mut DXGI_DECODE_SWAP_CHAIN_DESC,
119        pYuvDecodeBuffers: *mut IDXGIResource,
120        pRestrictToOutput: *mut IDXGIOutput,
121        ppSwapChain: *mut *mut IDXGIDecodeSwapChain,
122    ) -> HRESULT,
123}}
124RIDL!{#[uuid(0x595e39d1, 0x2724, 0x4663, 0x99, 0xb1, 0xda, 0x96, 0x9d, 0xe2, 0x83, 0x64)]
125interface IDXGIOutput2(IDXGIOutput2Vtbl): IDXGIOutput1(IDXGIOutput1Vtbl) {
126    fn SupportsOverlays() -> BOOL,
127}}
128RIDL!{#[uuid(0x8a6bb301, 0x7e7e, 0x41f4, 0xa8, 0xe0, 0x5b, 0x32, 0xf7, 0xf9, 0x9b, 0x18)]
129interface IDXGIOutput3(IDXGIOutput3Vtbl): IDXGIOutput2(IDXGIOutput2Vtbl) {
130    fn CheckOverlaySupport(
131        EnumFormat: DXGI_FORMAT,
132        pConcernedDevice: *mut IUnknown,
133        pFlags: *mut UINT,
134    ) -> HRESULT,
135}}
136RIDL!{#[uuid(0xa8be2ac4, 0x199f, 0x4946, 0xb3, 0x31, 0x79, 0x59, 0x9f, 0xb9, 0x8d, 0xe7)]
137interface IDXGISwapChain2(IDXGISwapChain2Vtbl): IDXGISwapChain1(IDXGISwapChain1Vtbl) {
138    fn SetSourceSize(
139        Width: UINT,
140        Height: UINT,
141    ) -> HRESULT,
142    fn GetSourceSize(
143        pWidth: *mut UINT,
144        pHeight: *mut UINT,
145    ) -> HRESULT,
146    fn SetMaximumFrameLatency(
147        MaxLatency: UINT,
148    ) -> HRESULT,
149    fn GetMaximumFrameLatency(
150        pMaxLatency: *mut UINT,
151    ) -> HRESULT,
152    fn GetFrameLatencyWaitableObject() -> HANDLE,
153    fn SetMatrixTransform(
154        pMatrix: *const DXGI_MATRIX_3X2_F,
155    ) -> HRESULT,
156    fn GetMatrixTransform(
157        pMatrix: *mut DXGI_MATRIX_3X2_F,
158    ) -> HRESULT,
159}}
160RIDL!{#[uuid(0xdd95b90b, 0xf05f, 0x4f6a, 0xbd, 0x65, 0x25, 0xbf, 0xb2, 0x64, 0xbd, 0x84)]
161interface IDXGISwapChainMedia(IDXGISwapChainMediaVtbl): IUnknown(IUnknownVtbl) {
162    fn GetFrameStatisticsMedia(
163        pStats: *mut DXGI_FRAME_STATISTICS_MEDIA,
164    ) -> HRESULT,
165    fn SetPresentDuration(
166        Duration: UINT,
167    ) -> HRESULT,
168    fn CheckPresentDurationSupport(
169        DesiredPresentDuration: UINT,
170        pClosestSmallerPresentDuration: *mut UINT,
171        pClosestLargerPresentDuration: *mut UINT,
172    ) -> HRESULT,
173}}
174pub const DXGI_CREATE_FACTORY_DEBUG: UINT = 0x1;
175DEFINE_GUID!{IID_IDXGIDevice3,
176    0x6007896c, 0x3244, 0x4afd, 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23}
177DEFINE_GUID!{IID_IDXGISwapChain2,
178    0xa8be2ac4, 0x199f, 0x4946, 0xb3, 0x31, 0x79, 0x59, 0x9f, 0xb9, 0x8d, 0xe7}
179DEFINE_GUID!{IID_IDXGIOutput2,
180    0x595e39d1, 0x2724, 0x4663, 0x99, 0xb1, 0xda, 0x96, 0x9d, 0xe2, 0x83, 0x64}
181DEFINE_GUID!{IID_IDXGIFactory3,
182    0x25483823, 0xcd46, 0x4c7d, 0x86, 0xca, 0x47, 0xaa, 0x95, 0xb8, 0x37, 0xbd}
183DEFINE_GUID!{IID_IDXGIDecodeSwapChain,
184    0x2633066b, 0x4514, 0x4c7a, 0x8f, 0xd8, 0x12, 0xea, 0x98, 0x05, 0x9d, 0x18}
185DEFINE_GUID!{IID_IDXGIFactoryMedia,
186    0x41e7d1f2, 0xa591, 0x4f7b, 0xa2, 0xe5, 0xfa, 0x9c, 0x84, 0x3e, 0x1c, 0x12}
187DEFINE_GUID!{IID_IDXGISwapChainMedia,
188    0xdd95b90b, 0xf05f, 0x4f6a, 0xbd, 0x65, 0x25, 0xbf, 0xb2, 0x64, 0xbd, 0x84}
189DEFINE_GUID!{IID_IDXGIOutput3,
190    0x8a6bb301, 0x7e7e, 0x41f4, 0xa8, 0xe0, 0x5b, 0x32, 0xf7, 0xf9, 0x9b, 0x18}