winapi_ui_automation/shared/
dxgi1_2.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_2.h
7use ctypes::c_void;
8use shared::basetsd::SIZE_T;
9use shared::dxgi::{
10    DXGI_MAPPED_RECT, DXGI_SWAP_EFFECT, IDXGIAdapter1, IDXGIAdapter1Vtbl, IDXGIDevice1,
11    IDXGIDevice1Vtbl, IDXGIFactory1, IDXGIFactory1Vtbl, IDXGIObject, IDXGIObjectVtbl, IDXGIOutput,
12    IDXGIOutputVtbl, IDXGIResource, IDXGIResourceVtbl, IDXGISurface1, IDXGISurface1Vtbl,
13    IDXGISwapChain, IDXGISwapChainVtbl,
14};
15use shared::dxgiformat::DXGI_FORMAT;
16use shared::dxgitype::{
17    DXGI_MODE_DESC, DXGI_MODE_ROTATION, DXGI_MODE_SCALING, DXGI_MODE_SCANLINE_ORDER, DXGI_RATIONAL,
18    DXGI_RGBA, DXGI_SAMPLE_DESC, DXGI_USAGE,
19};
20use shared::guiddef::REFGUID;
21use shared::minwindef::{BOOL, DWORD, UINT};
22use shared::windef::{HWND, POINT, RECT};
23use um::minwinbase::SECURITY_ATTRIBUTES;
24use um::unknwnbase::{IUnknown, IUnknownVtbl};
25use um::winnt::{HANDLE, HRESULT, LARGE_INTEGER, LPCWSTR, LUID, WCHAR};
26ENUM!{enum DXGI_ALPHA_MODE {
27    DXGI_ALPHA_MODE_UNSPECIFIED = 0,
28    DXGI_ALPHA_MODE_PREMULTIPLIED = 1,
29    DXGI_ALPHA_MODE_STRAIGHT = 2,
30    DXGI_ALPHA_MODE_IGNORE = 3,
31    DXGI_ALPHA_MODE_FORCE_DWORD = 0xFFFFFFFF,
32}}
33ENUM!{enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
34    DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
35    DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY = 1,
36    DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY = 2,
37    DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY = 3,
38    DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
39}}
40ENUM!{enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
41    DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
42    DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1,
43    DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2,
44    DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3,
45    DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
46}}
47ENUM!{enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE {
48    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 1,
49    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 2,
50    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 4,
51}}
52ENUM!{enum DXGI_SCALING {
53    DXGI_SCALING_STRETCH = 0,
54    DXGI_SCALING_NONE = 1,
55    DXGI_SCALING_ASPECT_RATIO_STRETCH = 2,
56}}
57ENUM!{enum _DXGI_OFFER_RESOURCE_PRIORITY {
58    DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1,
59    DXGI_OFFER_RESOURCE_PRIORITY_NORMAL = 2,
60    DXGI_OFFER_RESOURCE_PRIORITY_HIGH = 3,
61}}
62STRUCT!{struct DXGI_ADAPTER_DESC2 {
63    Description: [WCHAR; 128],
64    VendorId: UINT,
65    DeviceId: UINT,
66    SubSysId: UINT,
67    Revision: UINT,
68    DedicatedVideoMemory: SIZE_T,
69    DedicatedSystemMemory: SIZE_T,
70    SharedSystemMemory: SIZE_T,
71    AdapterLuid: LUID,
72    Flags: UINT,
73    GraphicsPreemptionGranularity: DXGI_GRAPHICS_PREEMPTION_GRANULARITY,
74    ComputePreemptionGranularity: DXGI_COMPUTE_PREEMPTION_GRANULARITY,
75}}
76STRUCT!{struct DXGI_MODE_DESC1 {
77    Width: UINT,
78    Height: UINT,
79    RefreshRate: DXGI_RATIONAL,
80    Format: DXGI_FORMAT,
81    ScanlineOrdering: DXGI_MODE_SCANLINE_ORDER,
82    Scaling: DXGI_MODE_SCALING,
83    Stereo: BOOL,
84}}
85STRUCT!{struct DXGI_OUTDUPL_DESC {
86    ModeDesc: DXGI_MODE_DESC,
87    Rotation: DXGI_MODE_ROTATION,
88    DesktopImageInSystemMemory: BOOL,
89}}
90STRUCT!{struct DXGI_OUTDUPL_FRAME_INFO {
91    LastPresentTime: LARGE_INTEGER,
92    LastMouseUpdateTime: LARGE_INTEGER,
93    AccumulatedFrames: UINT,
94    RectsCoalesced: BOOL,
95    ProtectedContentMaskedOut: BOOL,
96    PointerPosition: DXGI_OUTDUPL_POINTER_POSITION,
97    TotalMetadataBufferSize: UINT,
98    PointerShapeBufferSize: UINT,
99}}
100STRUCT!{struct DXGI_OUTDUPL_MOVE_RECT {
101    SourcePoint: POINT,
102    DestinationRect: RECT,
103}}
104STRUCT!{struct DXGI_OUTDUPL_POINTER_POSITION {
105    Position: POINT,
106    Visible: BOOL,
107}}
108STRUCT!{struct DXGI_OUTDUPL_POINTER_SHAPE_INFO {
109    Type: UINT,
110    Width: UINT,
111    Height: UINT,
112    Pitch: UINT,
113    HotSpot: POINT,
114}}
115STRUCT!{struct DXGI_PRESENT_PARAMETERS {
116    DirtyRectsCount: UINT,
117    pDirtyRects: *mut RECT,
118    pScrollRect: *mut RECT,
119    pScrollOffset: *mut POINT,
120}}
121STRUCT!{struct DXGI_SWAP_CHAIN_DESC1 {
122    Width: UINT,
123    Height: UINT,
124    Format: DXGI_FORMAT,
125    Stereo: BOOL,
126    SampleDesc: DXGI_SAMPLE_DESC,
127    BufferUsage: DXGI_USAGE,
128    BufferCount: UINT,
129    Scaling: DXGI_SCALING,
130    SwapEffect: DXGI_SWAP_EFFECT,
131    AlphaMode: DXGI_ALPHA_MODE,
132    Flags: UINT,
133}}
134STRUCT!{struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC {
135    RefreshRate: DXGI_RATIONAL,
136    ScanlineOrdering: DXGI_MODE_SCANLINE_ORDER,
137    Scaling: DXGI_MODE_SCALING,
138    Windowed: BOOL,
139}}
140RIDL!{#[uuid(0x0aa1ae0a, 0xfa0e, 0x4b84, 0x86, 0x44, 0xe0, 0x5f, 0xf8, 0xe5, 0xac, 0xb5)]
141interface IDXGIAdapter2(IDXGIAdapter2Vtbl): IDXGIAdapter1(IDXGIAdapter1Vtbl) {
142    fn GetDesc2(
143        pDesc: *mut DXGI_ADAPTER_DESC2,
144    ) -> HRESULT,
145}}
146RIDL!{#[uuid(0x05008617, 0xfbfd, 0x4051, 0xa7, 0x90, 0x14, 0x48, 0x84, 0xb4, 0xf6, 0xa9)]
147interface IDXGIDevice2(IDXGIDevice2Vtbl): IDXGIDevice1(IDXGIDevice1Vtbl) {
148    fn OfferResources(
149        NumResources: UINT,
150        ppResources: *mut *mut IDXGIResource,
151        Priority: DXGI_OFFER_RESOURCE_PRIORITY,
152    ) -> HRESULT,
153    fn ReclaimResources(
154        NumResources: UINT,
155        ppResources: *mut *mut IDXGIResource,
156        pDiscarded: *mut BOOL,
157    ) -> HRESULT,
158    fn EnqueueSetEvent(
159        hEvent: HANDLE,
160    ) -> HRESULT,
161}}
162RIDL!{#[uuid(0xea9dbf1a, 0xc88e, 0x4486, 0x85, 0x4a, 0x98, 0xaa, 0x01, 0x38, 0xf3, 0x0c)]
163interface IDXGIDisplayControl(IDXGIDisplayControlVtbl): IUnknown(IUnknownVtbl) {
164    fn IsStereoEnabled() -> BOOL,
165    fn SetStereoEnabled(
166        enabled: BOOL,
167    ) -> (),
168}}
169RIDL!{#[uuid(0x50c83a1c, 0xe072, 0x4c48, 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0)]
170interface IDXGIFactory2(IDXGIFactory2Vtbl): IDXGIFactory1(IDXGIFactory1Vtbl) {
171    fn IsWindowedStereoEnabled() -> BOOL,
172    fn CreateSwapChainForHwnd(
173        pDevice: *mut IUnknown,
174        hWnd: HWND,
175        pDesc: *const DXGI_SWAP_CHAIN_DESC1,
176        pFullscreenDesc: *const DXGI_SWAP_CHAIN_FULLSCREEN_DESC,
177        pRestrictToOutput: *mut IDXGIOutput,
178        ppSwapChain: *mut *mut IDXGISwapChain1,
179    ) -> HRESULT,
180    fn CreateSwapChainForCoreWindow(
181        pDevice: *mut IUnknown,
182        pWindow: *mut IUnknown,
183        pDesc: *const DXGI_SWAP_CHAIN_DESC1,
184        pRestrictToOutput: *mut IDXGIOutput,
185        ppSwapChain: *mut *mut IDXGISwapChain1,
186    ) -> HRESULT,
187    fn GetSharedResourceAdapterLuid(
188        hResource: HANDLE,
189        pLuid: *mut LUID,
190    ) -> HRESULT,
191    fn RegisterStereoStatusWindow(
192        WindowHandle: HWND,
193        wMsg: UINT,
194        pdwCookie: *mut DWORD,
195    ) -> HRESULT,
196    fn RegisterStereoStatusEvent(
197        hEvent: HANDLE,
198        pdwCookie: *mut DWORD,
199    ) -> HRESULT,
200    fn UnregisterStereoStatus(
201        dwCookie: DWORD,
202    ) -> (),
203    fn RegisterOcclusionStatusWindow(
204        WindowHandle: HWND,
205        wMsg: UINT,
206        pdwCookie: *mut DWORD,
207    ) -> HRESULT,
208    fn RegisterOcclusionStatusEvent(
209        hEvent: HANDLE,
210        pdwCookie: *mut DWORD,
211    ) -> HRESULT,
212    fn UnregisterOcclusionStatus(
213        dwCookie: DWORD,
214    ) -> (),
215    fn CreateSwapChainForComposition(
216        pDevice: *mut IUnknown,
217        pDesc: *const DXGI_SWAP_CHAIN_DESC1,
218        pRestrictToOutput: *mut IDXGIOutput,
219        ppSwapChain: *mut *mut IDXGISwapChain1,
220    ) -> HRESULT,
221}}
222RIDL!{#[uuid(0x00cddea8, 0x939b, 0x4b83, 0xa3, 0x40, 0xa6, 0x85, 0x22, 0x66, 0x66, 0xcc)]
223interface IDXGIOutput1(IDXGIOutput1Vtbl): IDXGIOutput(IDXGIOutputVtbl) {
224    fn GetDisplayModeList1(
225        EnumFormat: DXGI_FORMAT,
226        Flags: UINT,
227        pNumModes: *mut UINT,
228        pDesc: *mut DXGI_MODE_DESC1,
229    ) -> HRESULT,
230    fn FindClosestMatchingMode1(
231        pModeToMatch: *const DXGI_MODE_DESC1,
232        pClosestMatch: *mut DXGI_MODE_DESC1,
233        pConcernedDevice: *mut IUnknown,
234    ) -> HRESULT,
235    fn GetDisplaySurfaceData1(
236        pDestination: *mut IDXGIResource,
237    ) -> HRESULT,
238    fn DuplicateOutput(
239        pDevice: *mut IUnknown,
240        ppOutputDuplication: *mut *mut IDXGIOutputDuplication,
241    ) -> HRESULT,
242}}
243RIDL!{#[uuid(0x191cfac3, 0xa341, 0x470d, 0xb2, 0x6e, 0xa8, 0x64, 0xf4, 0x28, 0x31, 0x9c)]
244interface IDXGIOutputDuplication(IDXGIOutputDuplicationVtbl): IDXGIObject(IDXGIObjectVtbl) {
245    fn GetDesc(
246        pDesc: *mut DXGI_OUTDUPL_DESC,
247    ) -> (),
248    fn AcquireNextFrame(
249        TimeoutInMilliseconds: UINT,
250        pFrameInfo: *mut DXGI_OUTDUPL_FRAME_INFO,
251        ppDesktopResource: *mut *mut IDXGIResource,
252    ) -> HRESULT,
253    fn GetFrameDirtyRects(
254        DirtyRectsBufferSize: UINT,
255        pDirtyRectsBuffer: *mut RECT,
256        pDirtyRectsBufferSizeRequired: *mut UINT,
257    ) -> HRESULT,
258    fn GetFrameMoveRects(
259        MoveRectsBufferSize: UINT,
260        pMoveRectBuffer: *mut DXGI_OUTDUPL_MOVE_RECT,
261        pMoveRectsBufferSizeRequired: *mut UINT,
262    ) -> HRESULT,
263    fn GetFramePointerShape(
264        PointerShapeBufferSize: UINT,
265        pPointerShapeBuffer: *mut c_void,
266        pPointerShapeBufferSizeRequired: *mut UINT,
267        pPointerShapeInfo: *mut DXGI_OUTDUPL_POINTER_SHAPE_INFO,
268    ) -> HRESULT,
269    fn MapDesktopSurface(
270        pLockedRect: *mut DXGI_MAPPED_RECT,
271    ) -> HRESULT,
272    fn UnMapDesktopSurface() -> HRESULT,
273    fn ReleaseFrame() -> HRESULT,
274}}
275RIDL!{#[uuid(0x30961379, 0x4609, 0x4a41, 0x99, 0x8e, 0x54, 0xfe, 0x56, 0x7e, 0xe0, 0xc1)]
276interface IDXGIResource1(IDXGIResource1Vtbl): IDXGIResource(IDXGIResourceVtbl) {
277    fn CreateSubresourceSurface(
278        index: UINT,
279        ppSurface: *mut *mut IDXGISurface2,
280    ) -> HRESULT,
281    fn CreateSharedHandle(
282        pAttributes: *const SECURITY_ATTRIBUTES,
283        dwAccess: DWORD,
284        lpName: LPCWSTR,
285        pHandle: *mut HANDLE,
286    ) -> HRESULT,
287}}
288RIDL!{#[uuid(0xaba496dd, 0xb617, 0x4cb8, 0xa8, 0x66, 0xbc, 0x44, 0xd7, 0xeb, 0x1f, 0xa2)]
289interface IDXGISurface2(IDXGISurface2Vtbl): IDXGISurface1(IDXGISurface1Vtbl) {
290    fn GetResource(
291        riid: REFGUID,
292        ppParentResource: *mut *mut c_void,
293        pSubresourceIndex: *mut UINT,
294    ) -> HRESULT,
295}}
296RIDL!{#[uuid(0x790a45f7, 0x0d42, 0x4876, 0x98, 0x3a, 0x0a, 0x55, 0xcf, 0xe6, 0xf4, 0xaa)]
297interface IDXGISwapChain1(IDXGISwapChain1Vtbl): IDXGISwapChain(IDXGISwapChainVtbl) {
298    fn GetDesc1(
299        pDesc: *mut DXGI_SWAP_CHAIN_DESC1,
300    ) -> HRESULT,
301    fn GetFullscreenDesc(
302        pDesc: *mut DXGI_SWAP_CHAIN_FULLSCREEN_DESC,
303    ) -> HRESULT,
304    fn GetHwnd(
305        pHwnd: *mut HWND,
306    ) -> HRESULT,
307    fn GetCoreWindow(
308        refiid: REFGUID,
309        ppUnk: *mut *mut c_void,
310    ) -> HRESULT,
311    fn Present1(
312        SyncInterval: UINT,
313        PresentFlags: UINT,
314        pPresentParameters: *const DXGI_PRESENT_PARAMETERS,
315    ) -> HRESULT,
316    fn IsTemporaryMonoSupported() -> BOOL,
317    fn GetRestrictToOutput(
318        ppRestrictToOutput: *mut *mut IDXGIOutput,
319    ) -> HRESULT,
320    fn SetBackgroundColor(
321        pColor: *const DXGI_RGBA,
322    ) -> HRESULT,
323    fn GetBackgroundColor(
324        pColor: *mut DXGI_RGBA,
325    ) -> HRESULT,
326    fn SetRotation(
327        Rotation: DXGI_MODE_ROTATION,
328    ) -> HRESULT,
329    fn GetRotation(
330        pRotation: *mut DXGI_MODE_ROTATION,
331    ) -> HRESULT,
332}}
333pub type DXGI_OFFER_RESOURCE_PRIORITY = _DXGI_OFFER_RESOURCE_PRIORITY;
334pub const DXGI_ENUM_MODES_DISABLED_STEREO: UINT = 8;
335pub const DXGI_ENUM_MODES_STEREO: UINT = 4;
336pub const DXGI_SHARED_RESOURCE_READ: UINT = 0x80000000;
337pub const DXGI_SHARED_RESOURCE_WRITE: UINT = 1;
338DEFINE_GUID!{IID_IDXGIDisplayControl,
339    0xea9dbf1a, 0xc88e, 0x4486, 0x85, 0x4a, 0x98, 0xaa, 0x01, 0x38, 0xf3, 0x0c}
340DEFINE_GUID!{IID_IDXGIOutputDuplication,
341    0x191cfac3, 0xa341, 0x470d, 0xb2, 0x6e, 0xa8, 0x64, 0xf4, 0x28, 0x31, 0x9c}
342DEFINE_GUID!{IID_IDXGISurface2,
343    0xaba496dd, 0xb617, 0x4cb8, 0xa8, 0x66, 0xbc, 0x44, 0xd7, 0xeb, 0x1f, 0xa2}
344DEFINE_GUID!{IID_IDXGIResource1,
345    0x30961379, 0x4609, 0x4a41, 0x99, 0x8e, 0x54, 0xfe, 0x56, 0x7e, 0xe0, 0xc1}
346DEFINE_GUID!{IID_IDXGIDevice2,
347    0x05008617, 0xfbfd, 0x4051, 0xa7, 0x90, 0x14, 0x48, 0x84, 0xb4, 0xf6, 0xa9}
348DEFINE_GUID!{IID_IDXGISwapChain1,
349    0x790a45f7, 0x0d42, 0x4876, 0x98, 0x3a, 0x0a, 0x55, 0xcf, 0xe6, 0xf4, 0xaa}
350DEFINE_GUID!{IID_IDXGIFactory2,
351    0x50c83a1c, 0xe072, 0x4c48, 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0}
352DEFINE_GUID!{IID_IDXGIAdapter2,
353    0x0aa1ae0a, 0xfa0e, 0x4b84, 0x86, 0x44, 0xe0, 0x5f, 0xf8, 0xe5, 0xac, 0xb5}
354DEFINE_GUID!{IID_IDXGIOutput1,
355    0x00cddea8, 0x939b, 0x4b83, 0xa3, 0x40, 0xa6, 0x85, 0x22, 0x66, 0x66, 0xcc}