1 module directx.dxgi1_3;
2 
3 public import directx.dxgi1_2;
4 
5 enum DXGI_CREATE_FACTORY_DEBUG = 0x1;
6 
7 __gshared _DXGIGetDebugInterface1 DXGIGetDebugInterface1;
8 __gshared _CreateDXGIFactory2 CreateDXGIFactory2;
9 
10 extern (Windows) {
11     alias _CreateDXGIFactory2     = HRESULT function(UINT Flags, REFIID riid, void** ppFactory);
12     alias _DXGIGetDebugInterface1 = HRESULT function(UINT Flags, REFIID riid, void **pDebug);
13 }
14 
15 mixin( uuid!(IDXGIDevice3, "6007896c-3244-4afd-bf18-a6d3beda5023") );
16 extern (C++) interface IDXGIDevice3 : IDXGIDevice2
17 {
18 	void Trim();
19 }
20 
21 struct DXGI_MATRIX_3X2_F
22 {
23 	FLOAT _11;
24 	FLOAT _12;
25 	FLOAT _21;
26 	FLOAT _22;
27 	FLOAT _31;
28 	FLOAT _32;
29 }
30 
31 mixin( uuid!(IDXGISwapChain2, "a8be2ac4-199f-4946-b331-79599fb98de7") );
32 extern (C++) interface IDXGISwapChain2 : IDXGISwapChain1
33 {
34 	HRESULT SetSourceSize( 
35             UINT Width,
36             UINT Height);
37 
38 	HRESULT GetSourceSize( 
39             /*out*/ UINT* pWidth,
40             /*out*/ UINT* pHeight);
41 
42 	HRESULT SetMaximumFrameLatency( 
43             UINT MaxLatency);
44 
45 	HRESULT GetMaximumFrameLatency( 
46             /*out*/ UINT* pMaxLatency);
47 
48 	HANDLE GetFrameLatencyWaitableObject();
49 
50 	HRESULT SetMatrixTransform( 
51             const(DXGI_MATRIX_3X2_F)* pMatrix);
52 
53 	HRESULT GetMatrixTransform( 
54             /*out*/ DXGI_MATRIX_3X2_F* pMatrix);
55 }
56 
57 mixin( uuid!(IDXGIOutput2, "595e39d1-2724-4663-99b1-da969de28364") );
58 extern (C++) interface IDXGIOutput2 : IDXGIOutput1
59 {
60 	BOOL SupportsOverlays();
61 }
62 
63 mixin( uuid!(IDXGIFactory3, "25483823-cd46-4c7d-86ca-47aa95b837bd") );
64 extern (C++) interface IDXGIFactory3 : IDXGIFactory2
65 {
66 	UINT GetCreationFlags();
67 }
68 
69 struct DXGI_DECODE_SWAP_CHAIN_DESC
70 {
71 	UINT Flags;
72 }
73 
74 alias DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS = int;
75 enum : DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS
76 {
77 	DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE	= 0x1,
78 	DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709	= 0x2,
79 	DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC	= 0x4
80 }
81 
82 mixin( uuid!(IDXGIDecodeSwapChain, "2633066b-4514-4c7a-8fd8-12ea98059d18") );
83 extern (C++) interface IDXGIDecodeSwapChain : IUnknown
84 {
85 	HRESULT PresentBuffer( 
86             UINT BufferToPresent,
87             UINT SyncInterval,
88             UINT Flags);
89 
90 	HRESULT SetSourceRect( 
91             const(RECT)* pRect);
92 
93 	HRESULT SetTargetRect( 
94             const(RECT)* pRect);
95 
96 	HRESULT SetDestSize( 
97             UINT Width,
98             UINT Height);
99 
100 	HRESULT GetSourceRect( 
101             /*out*/ RECT* pRect);
102 
103 	HRESULT GetTargetRect( 
104             /*out*/ RECT* pRect);
105 
106 	HRESULT GetDestSize( 
107             /*out*/ UINT* pWidth,
108             /*out*/ UINT* pHeight);
109 
110 	HRESULT SetColorSpace( 
111             DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS ColorSpace);
112 
113 	DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS GetColorSpace();
114 
115 }
116 
117 mixin( uuid!(IDXGIFactoryMedia, "41e7d1f2-a591-4f7b-a2e5-fa9c843e1c12") );
118 extern (C++) interface IDXGIFactoryMedia : IUnknown
119 {
120 	HRESULT CreateSwapChainForCompositionSurfaceHandle( 
121             IUnknown pDevice,
122             HANDLE hSurface,
123             const(DXGI_SWAP_CHAIN_DESC1)* pDesc,
124             IDXGIOutput pRestrictToOutput,
125             /*out*/ IDXGISwapChain1* ppSwapChain);
126 
127 	HRESULT CreateDecodeSwapChainForCompositionSurfaceHandle( 
128             IUnknown pDevice,
129             HANDLE hSurface,
130             DXGI_DECODE_SWAP_CHAIN_DESC* pDesc,
131             IDXGIResource pYuvDecodeBuffers,
132             IDXGIOutput pRestrictToOutput,
133             /*out*/ IDXGIDecodeSwapChain* ppSwapChain);
134 }
135 
136 alias DXGI_FRAME_PRESENTATION_MODE = int;
137 enum : DXGI_FRAME_PRESENTATION_MODE
138 {
139 	DXGI_FRAME_PRESENTATION_MODE_COMPOSED	= 0,
140 	DXGI_FRAME_PRESENTATION_MODE_OVERLAY	= 1,
141 	DXGI_FRAME_PRESENTATION_MODE_NONE	    = 2,
142     DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE	= 3
143 }
144 
145 struct DXGI_FRAME_STATISTICS_MEDIA
146 {
147 	UINT PresentCount;
148 	UINT PresentRefreshCount;
149 	UINT SyncRefreshCount;
150 	LARGE_INTEGER SyncQPCTime;
151 	LARGE_INTEGER SyncGPUTime;
152 	DXGI_FRAME_PRESENTATION_MODE CompositionMode;
153 	UINT ApprovedPresentDuration;
154 }
155 
156 mixin( uuid!(IDXGISwapChainMedia, "dd95b90b-f05f-4f6a-bd65-25bfb264bd84") );
157 extern (C++) interface IDXGISwapChainMedia : IUnknown
158 {
159 	HRESULT GetFrameStatisticsMedia( 
160             /*out*/ DXGI_FRAME_STATISTICS_MEDIA* pStats);
161 
162 	HRESULT SetPresentDuration( 
163             UINT Duration);
164 
165 	HRESULT CheckPresentDurationSupport( 
166             UINT DesiredPresentDuration,
167             /*out*/ UINT* pClosestSmallerPresentDuration,
168             /*out*/ UINT* pClosestLargerPresentDuration);
169 }
170 
171 alias DWORD DXGI_OVERLAY_SUPPORT_FLAG;
172 enum : DXGI_OVERLAY_SUPPORT_FLAG {
173     DXGI_OVERLAY_SUPPORT_FLAG_DIRECT  = 0x1,
174     DXGI_OVERLAY_SUPPORT_FLAG_SCALING = 0x2
175 }
176 
177 mixin(uuid!(IDXGIOutput3, "8a6bb301-7e7e-41F4-a8e0-5b32f7f99b18"));
178 
179 extern (C++) interface IDXGIOutput3 : IDXGIOutput2 {
180     HRESULT CheckOverlaySupport(DXGI_FORMAT EnumFormat,
181                                 IUnknown pConcernedDevice,
182                                 UINT* pFlags);
183 }