1 module directx.dxgi;
2 
3 version(Windows):
4 
5 public import directx.com;
6 public import directx.dxgitype;
7 
8 enum DXGI_CPU_ACCESS_NONE              = ( 0 );
9 enum DXGI_CPU_ACCESS_DYNAMIC           = ( 1 );
10 enum DXGI_CPU_ACCESS_READ_WRITE        = ( 2 );
11 enum DXGI_CPU_ACCESS_SCRATCH           = ( 3 );
12 enum DXGI_CPU_ACCESS_FIELD             = 15;
13 enum DXGI_USAGE_SHADER_INPUT           = ( 1L << (0 + 4) );
14 enum DXGI_USAGE_RENDER_TARGET_OUTPUT   = ( 1L << (1 + 4) );
15 enum DXGI_USAGE_BACK_BUFFER            = ( 1L << (2 + 4) );
16 enum DXGI_USAGE_SHARED                 = ( 1L << (3 + 4) );
17 enum DXGI_USAGE_READ_ONLY              = ( 1L << (4 + 4) );
18 enum DXGI_USAGE_DISCARD_ON_PRESENT     = ( 1L << (5 + 4) );
19 enum DXGI_USAGE_UNORDERED_ACCESS       = ( 1L << (6 + 4) );
20 alias UINT DXGI_USAGE;
21 
22 struct DXGI_FRAME_STATISTICS
23 {
24 	UINT PresentCount;
25 	UINT PresentRefreshCount;
26 	UINT SyncRefreshCount;
27 	LARGE_INTEGER SyncQPCTime;
28 	LARGE_INTEGER SyncGPUTime;
29 }
30 
31 struct DXGI_MAPPED_RECT
32 {
33 	INT Pitch;
34 	BYTE *pBits;
35 }
36 
37 struct DXGI_ADAPTER_DESC
38 {
39 	WCHAR[ 128 ] Description;
40 	UINT VendorId;
41 	UINT DeviceId;
42 	UINT SubSysId;
43 	UINT Revision;
44 	SIZE_T DedicatedVideoMemory;
45 	SIZE_T DedicatedSystemMemory;
46 	SIZE_T SharedSystemMemory;
47 	LUID AdapterLuid;
48 }
49 
50 alias HANDLE HMONITOR;
51 
52 struct DXGI_OUTPUT_DESC
53 {
54 	WCHAR[32] DeviceName;
55 	RECT DesktopCoordinates;
56 	BOOL AttachedToDesktop;
57 	DXGI_MODE_ROTATION Rotation;
58 	HMONITOR Monitor;
59 }
60 
61 struct DXGI_SHARED_RESOURCE
62 {
63 	HANDLE Handle;
64 }
65 
66 enum DXGI_RESOURCE_PRIORITY_MINIMUM = ( 0x28000000 );
67 enum DXGI_RESOURCE_PRIORITY_LOW     = ( 0x50000000 );
68 enum DXGI_RESOURCE_PRIORITY_NORMAL  = ( 0x78000000 );
69 enum DXGI_RESOURCE_PRIORITY_HIGH    = ( 0xa0000000 );
70 enum DXGI_RESOURCE_PRIORITY_MAXIMUM = ( 0xc8000000 );
71 
72 alias DXGI_RESIDENCY = int;
73 enum : DXGI_RESIDENCY
74 {
75 	DXGI_RESIDENCY_FULLY_RESIDENT                = 1,
76 	DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY     = 2,
77 	DXGI_RESIDENCY_EVICTED_TO_DISK               = 3
78 }
79 
80 struct DXGI_SURFACE_DESC
81 {
82 	UINT Width;
83 	UINT Height;
84 	DXGI_FORMAT Format;
85 	DXGI_SAMPLE_DESC SampleDesc;
86 }
87 
88 alias DXGI_SWAP_EFFECT = int;
89 enum : DXGI_SWAP_EFFECT
90 {
91 	DXGI_SWAP_EFFECT_DISCARD         = 0,
92 	DXGI_SWAP_EFFECT_SEQUENTIAL      = 1,
93     DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3,
94     DXGI_SWAP_EFFECT_FLIP_DISCARD    = 4
95 }
96 
97 alias DXGI_SWAP_CHAIN_FLAG = int;
98 enum : DXGI_SWAP_CHAIN_FLAG
99 {
100 	DXGI_SWAP_CHAIN_FLAG_NONPREROTATED      = 1,
101 	DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH  = 2,
102 	DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE     = 4
103 }
104 
105 struct DXGI_SWAP_CHAIN_DESC
106 {
107 	DXGI_MODE_DESC BufferDesc;
108 	DXGI_SAMPLE_DESC SampleDesc;
109 	DXGI_USAGE BufferUsage;
110 	UINT BufferCount;
111 	HWND OutputWindow;
112 	BOOL Windowed;
113 	DXGI_SWAP_EFFECT SwapEffect;
114 	UINT Flags;
115 }
116 
117 mixin( uuid!(IDXGIObject, "aec22fb8-76f3-4639-9be0-28eb43a67a2e") );
118 extern (C++) interface IDXGIObject : IUnknown
119 {
120 	HRESULT SetPrivateData( 
121 				REFGUID Name,
122 				UINT DataSize,
123 				const void* pData);
124 
125 	HRESULT SetPrivateDataInterface( 
126 				REFGUID Name,
127 				const(IUnknown) pUnknown);
128 
129 	HRESULT GetPrivateData(
130 				REFGUID Name,
131 				UINT* pDataSize,
132 				void* pData);
133 
134 	HRESULT GetParent( 
135 				REFIID riid,
136 				void** ppParent);
137 }
138 
139 mixin( uuid!(IDXGIDeviceSubObject, "3d3e0379-f9de-4d58-bb6c-18d62992f1a6") );
140 extern (C++) interface IDXGIDeviceSubObject : IDXGIObject
141 {
142     HRESULT GetDevice( 
143 				REFIID riid,
144 				void** ppDevice);
145 }
146  
147 mixin( uuid!(IDXGIResource, "035f3ab4-482e-4e50-b41f-8a7f8bd8960b") );
148 extern (C++) interface IDXGIResource : IDXGIDeviceSubObject
149 {
150 	HRESULT GetSharedHandle( 
151 				HANDLE* pSharedHandle);
152 
153 	HRESULT GetUsage( 
154 				DXGI_USAGE* pUsage);
155 
156 	HRESULT SetEvictionPriority( 
157 				UINT EvictionPriority);
158 
159 	HRESULT GetEvictionPriority( 
160 				UINT* pEvictionPriority);
161 }
162 
163 mixin( uuid!(IDXGIKeyedMutex, "9d8e1289-d7b3-465f-8126-250e349af85d") );
164 extern (C++) interface IDXGIKeyedMutex : IDXGIDeviceSubObject
165 {
166 	HRESULT AcquireSync( 
167 				UINT64 Key,
168 				DWORD dwMilliseconds);
169 
170 	HRESULT ReleaseSync( 
171 				UINT64 Key);
172 }
173 
174 enum DXGI_MAP_READ    = ( 1UL );
175 enum DXGI_MAP_WRITE   = ( 2UL );
176 enum DXGI_MAP_DISCARD = ( 4UL );
177 
178 mixin( uuid!(IDXGISurface, "cafcb56c-6ac3-4889-bf47-9e23bbd260ec") );
179 extern (C++) interface IDXGISurface : IDXGIDeviceSubObject
180 {
181 	HRESULT GetDesc( 
182 				DXGI_SURFACE_DESC* pDesc);
183 
184 	HRESULT Map( 
185 				DXGI_MAPPED_RECT* pLockedRect,
186 				UINT MapFlags);
187 
188 	HRESULT Unmap();
189 }
190  
191 mixin( uuid!(IDXGISurface1, "4AE63092-6327-4c1b-80AE-BFE12EA32B86") );
192 extern (C++) interface IDXGISurface1 : IDXGISurface
193 {
194 	HRESULT GetDC( 
195 				BOOL Discard,
196 				HDC* phdc);
197 
198 	HRESULT ReleaseDC( 
199 				RECT* pDirtyRect);
200 }
201 
202 mixin( uuid!(IDXGIAdapter, "2411e7e1-12ac-4ccf-bd14-9798e8534dc0") );
203 extern (C++) interface IDXGIAdapter : IDXGIObject
204 {
205 	HRESULT EnumOutputs( 
206 				UINT Output,
207 				IDXGIOutput* ppOutput);
208 
209 	HRESULT GetDesc( 
210 				DXGI_ADAPTER_DESC* pDesc);
211 
212 	HRESULT CheckInterfaceSupport( 
213 				REFGUID InterfaceName,
214 				LARGE_INTEGER* pUMDVersion);
215 }
216 
217 mixin( uuid!(IDXGIOutput, "ae02eedb-c735-4690-8d52-5a8dc20213aa") );
218 extern (C++) interface IDXGIOutput : IDXGIObject
219 {
220 	HRESULT GetDesc( 
221 				DXGI_OUTPUT_DESC* pDesc);
222 
223 	HRESULT GetDisplayModeList( 
224 				DXGI_FORMAT EnumFormat,
225 				UINT Flags,
226 				UINT* pNumModes,
227 				DXGI_MODE_DESC* pDesc);
228 
229 	HRESULT FindClosestMatchingMode( 
230 				const (DXGI_MODE_DESC)* pModeToMatch,
231 				DXGI_MODE_DESC* pClosestMatch,
232 				IUnknown pConcernedDevice);
233 
234 	HRESULT WaitForVBlank();
235 
236 	HRESULT TakeOwnership( 
237 				IUnknown pDevice,
238 				BOOL Exclusive);
239 
240 	void ReleaseOwnership();
241 
242 	HRESULT GetGammaControlCapabilities( 
243 				DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps);
244 
245 	HRESULT SetGammaControl( 
246 				const(DXGI_GAMMA_CONTROL)* pArray);
247 
248 	HRESULT GetGammaControl( 
249 				DXGI_GAMMA_CONTROL* pArray);
250 
251 	HRESULT SetDisplaySurface( 
252 				IDXGISurface pScanoutSurface);
253 
254 	HRESULT  GetDisplaySurfaceData( 
255 				IDXGISurface pDestination);
256 
257 	HRESULT  GetFrameStatistics( 
258 				DXGI_FRAME_STATISTICS* pStats);
259 }
260 
261 enum DXGI_MAX_SWAP_CHAIN_BUFFERS          = ( 16 );
262 enum DXGI_PRESENT_TEST                    = 0x00000001UL;
263 enum DXGI_PRESENT_DO_NOT_SEQUENCE         = 0x00000002UL;
264 enum DXGI_PRESENT_RESTART                 = 0x00000004UL;
265 enum DXGI_PRESENT_DO_NOT_WAIT             = 0x00000008UL;
266 enum DXGI_PRESENT_STEREO_PREFER_RIGHT     = 0x00000010UL;
267 enum DXGI_PRESENT_STEREO_TEMPORARY_MONO   = 0x00000020UL;
268 enum DXGI_PRESENT_RESTRICT_TO_OUTPUT      = 0x00000040UL;
269 enum DXGI_PRESENT_USE_DURATION            = 0x00000100UL;
270 
271 mixin( uuid!(IDXGISwapChain, "310d36a0-d2e7-4c0a-aa04-6a9d23b8886a") );
272 extern (C++) interface IDXGISwapChain : IDXGIDeviceSubObject
273 {
274 	HRESULT Present( 
275 				UINT SyncInterval,
276 				UINT Flags);
277 
278 	HRESULT GetBuffer( 
279 				UINT Buffer,
280 				REFIID riid,
281 				void **ppSurface);
282 
283 	HRESULT SetFullscreenState( 
284 				BOOL Fullscreen,
285 				IDXGIOutput pTarget);
286 
287 	HRESULT GetFullscreenState( 
288 				BOOL* pFullscreen,
289 				IDXGIOutput* ppTarget);
290 
291 	HRESULT GetDesc( 
292 				DXGI_SWAP_CHAIN_DESC* pDesc);
293 
294 	HRESULT ResizeBuffers( 
295 				UINT BufferCount,
296 				UINT Width,
297 				UINT Height,
298 				DXGI_FORMAT NewFormat,
299 				UINT SwapChainFlags);
300 
301 	HRESULT ResizeTarget( 
302 				const(DXGI_MODE_DESC)* pNewTargetParameters);
303 
304 	HRESULT GetContainingOutput( 
305 				IDXGIOutput* ppOutput);
306 
307 	HRESULT GetFrameStatistics( 
308 				DXGI_FRAME_STATISTICS* pStats);
309 
310 	HRESULT GetLastPresentCount( 
311 				UINT* pLastPresentCount);
312 }
313     
314 enum DXGI_MWA_NO_WINDOW_CHANGES      = ( 1 << 0 );
315 enum DXGI_MWA_NO_ALT_ENTER           = ( 1 << 1 );
316 enum DXGI_MWA_NO_PRINT_SCREEN        = ( 1 << 2 );
317 enum DXGI_MWA_VALID                  = ( 0x7 );
318 
319 mixin( uuid!(IDXGIFactory, "7b7166ec-21c7-44ae-b21a-c9ae321ae369") );
320 extern (C++) interface IDXGIFactory : IDXGIObject
321 {
322 	HRESULT EnumAdapters( 
323 				UINT Adapter,
324 				IDXGIAdapter* ppAdapter);
325 
326 	HRESULT MakeWindowAssociation( 
327 				HWND WindowHandle,
328 				UINT Flags);
329 
330 	HRESULT GetWindowAssociation( 
331 				HWND *pWindowHandle);
332 
333 	HRESULT CreateSwapChain( 
334 				IUnknown pDevice,
335 				DXGI_SWAP_CHAIN_DESC* pDesc,
336 				IDXGISwapChain* ppSwapChain);
337 
338 	HRESULT CreateSoftwareAdapter( 
339 				HMODULE Module, 
340 				IDXGIAdapter* ppAdapter);
341 }
342 
343 
344 extern(Windows) nothrow 
345 HRESULT CreateDXGIFactory(REFIID riid, IDXGIFactory* ppFactory);
346 
347 extern(Windows) nothrow 
348 HRESULT CreateDXGIFactory1(REFIID riid, void** ppFactory);
349 
350 
351 alias _CreateDXGIFactory = extern(Windows) nothrow HRESULT function(REFIID riid,
352                                                 void** ppFactory);
353 
354 alias _CreateDXGIFactory1 = extern(Windows) nothrow HRESULT function(REFIID riid,
355                                                  void** ppFactory);
356 
357 
358 mixin( uuid!(IDXGIDevice, "54ec77fa-1377-44e6-8c32-88fd5f44c84c") );
359 extern (C++) interface IDXGIDevice : IDXGIObject
360 {
361 	HRESULT GetAdapter( 
362 				IDXGIAdapter* pAdapter);
363 
364 	HRESULT CreateSurface( 
365 				const(DXGI_SURFACE_DESC)* pDesc,
366 				UINT NumSurfaces,
367 				DXGI_USAGE Usage,
368 				const(DXGI_SHARED_RESOURCE)* pSharedResource,
369 				IDXGISurface* ppSurface);
370 
371 	HRESULT QueryResourceResidency( 
372 				const(IUnknown)* ppResources,
373 				DXGI_RESIDENCY* pResidencyStatus,
374 				UINT NumResources);
375 
376 	HRESULT SetGPUThreadPriority( 
377 				INT Priority);
378 
379 	HRESULT GetGPUThreadPriority( 
380 				INT* pPriority);
381 }
382 
383 alias DXGI_ADAPTER_FLAG = int;
384 enum : DXGI_ADAPTER_FLAG
385 {
386 	DXGI_ADAPTER_FLAG_NONE          = 0,
387 	DXGI_ADAPTER_FLAG_REMOTE        = 1,
388 	DXGI_ADAPTER_FLAG_SOFTWARE      = 2,
389 	DXGI_ADAPTER_FLAG_FORCE_DWORD   = 0xffffffff
390 }
391 
392 struct DXGI_ADAPTER_DESC1
393 {
394 	WCHAR[128] Description;
395 	UINT VendorId;
396 	UINT DeviceId;
397 	UINT SubSysId;
398 	UINT Revision;
399 	SIZE_T DedicatedVideoMemory;
400 	SIZE_T DedicatedSystemMemory;
401 	SIZE_T SharedSystemMemory;
402 	LUID AdapterLuid;
403 	UINT Flags;
404 }
405 
406 struct DXGI_DISPLAY_COLOR_SPACE
407 {
408 	FLOAT[8 ][2] PrimaryCoordinates;
409 	FLOAT[16][2] WhitePoints;
410 }
411 
412 mixin( uuid!(IDXGIFactory1, "770aae78-f26f-4dba-a829-253c83d1b387") );
413 extern (C++) interface IDXGIFactory1 : IDXGIFactory
414 {
415 	HRESULT EnumAdapters1( 
416 				UINT Adapter,
417 				IDXGIAdapter1* ppAdapter);
418 
419 	BOOL IsCurrent();
420 }
421    
422 mixin( uuid!(IDXGIAdapter1, "29038f61-3839-4626-91fd-086879011a05") );
423 extern (C++) interface IDXGIAdapter1 : IDXGIAdapter
424 {
425 	HRESULT GetDesc1( 
426 				DXGI_ADAPTER_DESC1* pDesc);
427 }
428 
429 mixin( uuid!(IDXGIDevice1, "77db970f-6276-48ba-ba28-070143b4392c") );
430 extern (C++) interface IDXGIDevice1 : IDXGIDevice
431 {
432 	HRESULT SetMaximumFrameLatency( 
433 				UINT MaxLatency);
434 
435     HRESULT GetMaximumFrameLatency( 
436 				UINT *pMaxLatency);
437 }