1 // Copyright © 2015; Dmitry Roschin
2 // Licensed under the MIT License <LICENSE.md>
3 //! Mappings for the contents of dxgi1_3.h
4 
5 ENUM!{ enum DXGI_FRAME_PRESENTATION_MODE {
6     DXGI_FRAME_PRESENTATION_MODE_COMPOSED = 0,
7     DXGI_FRAME_PRESENTATION_MODE_OVERLAY = 1,
8     DXGI_FRAME_PRESENTATION_MODE_NONE = 2,
9     DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE = 3,
10 }}
11 
12 FLAGS!{ enum DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS {
13     DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE = 0x1,
14     DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 = 0x2,
15     DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC = 0x4,
16 }}
17 
18 FLAGS!{ enum DXGI_OVERLAY_SUPPORT_FLAG {
19     DXGI_OVERLAY_SUPPORT_FLAG_DIRECT = 0x1,
20     DXGI_OVERLAY_SUPPORT_FLAG_SCALING = 0x2,
21 }}
22 
23 STRUCT!{struct DXGI_DECODE_SWAP_CHAIN_DESC {
24     Flags: ::UINT,
25 }}
26 
27 STRUCT!{struct DXGI_FRAME_STATISTICS_MEDIA {
28     PresentCount: ::UINT,
29     PresentRefreshCount: ::UINT,
30     SyncRefreshCount: ::UINT,
31     SyncQPCTime: ::LARGE_INTEGER,
32     SyncGPUTime: ::LARGE_INTEGER,
33     CompositionMode: ::DXGI_FRAME_PRESENTATION_MODE,
34     ApprovedPresentDuration: ::UINT,
35 }}
36 
37 STRUCT!{struct DXGI_MATRIX_3X2_F {
38     _11: ::FLOAT,
39     _12: ::FLOAT,
40     _21: ::FLOAT,
41     _22: ::FLOAT,
42     _31: ::FLOAT,
43     _32: ::FLOAT,
44 }}
45 
46 RIDL!(
47 interface IDXGIDecodeSwapChain(IDXGIDecodeSwapChainVtbl): IUnknown(IUnknownVtbl) {
48     fn PresentBuffer(
49         &mut self, BufferToPresent: ::UINT, SyncInterval: ::UINT, Flags: ::UINT
50     ) -> ::HRESULT,
51     fn SetSourceRect(&mut self, pRect: *const ::RECT) -> ::HRESULT,
52     fn SetTargetRect(&mut self, pRect: *const ::RECT) -> ::HRESULT,
53     fn SetDestSize(&mut self, Width: ::UINT, Height: ::UINT) -> ::HRESULT,
54     fn GetSourceRect(&mut self, pRect: *mut ::RECT) -> ::HRESULT,
55     fn GetTargetRect(&mut self, pRect: *mut ::RECT) -> ::HRESULT,
56     fn GetDestSize(
57         &mut self, pWidth: *mut ::UINT, pHeight: *mut ::UINT
58     ) -> ::HRESULT,
59     fn SetColorSpace(
60         &mut self, ColorSpace: ::DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS
61     ) -> ::HRESULT,
62     fn GetColorSpace(&mut self) -> ::DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS
63 });
64 
65 RIDL!(
66 interface IDXGIDevice3(IDXGIDevice3Vtbl): IDXGIDevice2(IDXGIDevice2Vtbl) {
67     fn Trim(&mut self) -> ()
68 });
69 
70 RIDL!(
71 interface IDXGIFactory3(IDXGIFactory3Vtbl): IDXGIFactory2(IDXGIFactory2Vtbl) {
72     fn GetCreationFlags(&mut self) -> ::UINT
73 });
74 
75 RIDL!(
76 interface IDXGIFactoryMedia(IDXGIFactoryMediaVtbl): IUnknown(IUnknownVtbl) {
77     fn CreateSwapChainForCompositionSurfaceHandle(
78         &mut self, pDevice: *mut ::IUnknown, hSurface: ::HANDLE,
79         pDesc: *const ::DXGI_SWAP_CHAIN_DESC1, pRestrictToOutput: *mut ::IDXGIOutput,
80         ppSwapChain: *mut *mut ::IDXGISwapChain1
81     ) -> ::HRESULT,
82     fn CreateDecodeSwapChainForCompositionSurfaceHandle(
83         &mut self, pDevice: *mut ::IUnknown, hSurface: ::HANDLE,
84         pDesc: *mut ::DXGI_DECODE_SWAP_CHAIN_DESC, pYuvDecodeBuffers: *mut ::IDXGIResource,
85         pRestrictToOutput: *mut ::IDXGIOutput, ppSwapChain: *mut *mut ::IDXGIDecodeSwapChain
86     ) -> ::HRESULT
87 });
88 
89 RIDL!(
90 interface IDXGIOutput2(IDXGIOutput2Vtbl): IDXGIOutput1(IDXGIOutput1Vtbl) {
91     fn SupportsOverlays(&mut self) -> ::BOOL
92 });
93 
94 RIDL!(
95 interface IDXGIOutput3(IDXGIOutput3Vtbl): IDXGIOutput2(IDXGIOutput2Vtbl) {
96     fn CheckOverlaySupport(
97         &mut self, EnumFormat: ::DXGI_FORMAT, pConcernedDevice: *mut ::IUnknown,
98         pFlags: *mut ::UINT
99     ) -> ::HRESULT
100 });
101 
102 RIDL!(
103 interface IDXGISwapChain2(IDXGISwapChain2Vtbl): IDXGISwapChain1(IDXGISwapChain1Vtbl) {
104     fn SetSourceSize(&mut self, Width: ::UINT, Height: ::UINT) -> ::HRESULT,
105     fn GetSourceSize(
106         &mut self, pWidth: *mut ::UINT, pHeight: *mut ::UINT
107     ) -> ::HRESULT,
108     fn SetMaximumFrameLatency(&mut self, MaxLatency: ::UINT) -> ::HRESULT,
109     fn GetMaximumFrameLatency(&mut self, pMaxLatency: *mut ::UINT) -> ::HRESULT,
110     fn GetFrameLatencyWaitableObject(&mut self) -> ::HANDLE,
111     fn SetMatrixTransform(
112         &mut self, pMatrix: *const ::DXGI_MATRIX_3X2_F
113     ) -> ::HRESULT,
114     fn GetMatrixTransform(
115         &mut self, pMatrix: *mut ::DXGI_MATRIX_3X2_F
116     ) -> ::HRESULT
117 });
118 
119 RIDL!(
120 interface IDXGISwapChainMedia(IDXGISwapChainMediaVtbl): IUnknown(IUnknownVtbl) {
121     fn GetFrameStatisticsMedia(
122         &mut self, pStats: *mut ::DXGI_FRAME_STATISTICS_MEDIA
123     ) -> ::HRESULT,
124     fn SetPresentDuration(&mut self, Duration: ::UINT) -> ::HRESULT,
125     fn CheckPresentDurationSupport(
126         &mut self, DesiredPresentDuration: ::UINT, pClosestSmallerPresentDuration: *mut ::UINT,
127         pClosestLargerPresentDuration: *mut ::UINT
128     ) -> ::HRESULT
129 });
130 
131 pub const DXGI_CREATE_FACTORY_DEBUG: ::UINT = 0x1;
132