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