1 /***********************************************************************\
2 * dxgi.d *
3 * *
4 * Windows API header module *
5 * *
6 * Placed into public domain *
7 \***********************************************************************/
8 module win32.directx.dxgi;
9 version(Windows):
10
11 private import win32.windows;
12
13 private import win32.directx.dxgitype;
14
15 enum {
16 DXGI_CPU_ACCESS_NONE = 0,
17 DXGI_CPU_ACCESS_DYNAMIC = 1,
18 DXGI_CPU_ACCESS_READ_WRITE = 2,
19 DXGI_CPU_ACCESS_SCRATCH = 3,
20 DXGI_CPU_ACCESS_FIELD = 15
21 }
22
23 enum {
24 DXGI_USAGE_SHADER_INPUT = 0b00_00010000,
25 DXGI_USAGE_RENDER_TARGET_OUTPUT = 0b00_00100000,
26 DXGI_USAGE_BACK_BUFFER = 0b00_01000000,
27 DXGI_USAGE_SHARED = 0b00_10000000,
28 DXGI_USAGE_READ_ONLY = 0b01_00000000,
29 DXGI_USAGE_DISCARD_ON_PRESENT = 0b10_00000000,
30 }
31 alias UINT DXGI_USAGE;
32
33 struct DXGI_FRAME_STATISTICS {
34 UINT PresentCount;
35 UINT PresentRefreshCount;
36 UINT SyncRefreshCount;
37 LARGE_INTEGER SyncQPCTime;
38 LARGE_INTEGER SyncGPUTime;
39 }
40
41 struct DXGI_MAPPED_RECT {
42 INT Pitch;
43 BYTE* pBits;
44 }
45
46 struct DXGI_ADAPTER_DESC {
47 WCHAR[128] Description;
48 UINT VendorId;
49 UINT DeviceId;
50 UINT SubSysId;
51 UINT Revision;
52 SIZE_T DedicatedVideoMemory;
53 SIZE_T DedicatedSystemMemory;
54 SIZE_T SharedSystemMemory;
55 LUID AdapterLuid;
56 }
57
58 struct DXGI_OUTPUT_DESC {
59 WCHAR[32] DeviceName;
60 RECT DesktopCoordinates;
61 BOOL AttachedToDesktop;
62 DXGI_MODE_ROTATION Rotation;
63 HMONITOR Monitor;
64 }
65
66 struct DXGI_SHARED_RESOURCE {
67 HANDLE Handle;
68 }
69
70 enum {
71 DXGI_RESOURCE_PRIORITY_MINIMUM = 0x28000000,
72 DXGI_RESOURCE_PRIORITY_LOW = 0x50000000,
73 DXGI_RESOURCE_PRIORITY_NORMAL = 0x78000000,
74 DXGI_RESOURCE_PRIORITY_HIGH = 0xa0000000,
75 DXGI_RESOURCE_PRIORITY_MAXIMUM = 0xc8000000
76 }
77
78 enum DXGI_RESIDENCY {
79 DXGI_RESIDENCY_FULLY_RESIDENT = 1,
80 DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2,
81 DXGI_RESIDENCY_EVICTED_TO_DISK = 3
82 }
83
84 struct DXGI_SURFACE_DESC {
85 UINT Width;
86 UINT Height;
87 DXGI_FORMAT Format;
88 DXGI_SAMPLE_DESC SampleDesc;
89 }
90
91 enum DXGI_SWAP_EFFECT {
92 DXGI_SWAP_EFFECT_DISCARD = 0,
93 DXGI_SWAP_EFFECT_SEQUENTIAL = 1
94 }
95
96 enum DXGI_SWAP_CHAIN_FLAG {
97 DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1,
98 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2
99 }
100
101 struct DXGI_SWAP_CHAIN_DESC {
102 DXGI_MODE_DESC BufferDesc;
103 DXGI_SAMPLE_DESC SampleDesc;
104 DXGI_USAGE BufferUsage;
105 UINT BufferCount;
106 HWND OutputWindow;
107 BOOL Windowed;
108 DXGI_SWAP_EFFECT SwapEffect;
109 UINT Flags;
110 }
111
112 interface IDXGIObject : IUnknown {
113 extern(Windows) :
114 HRESULT SetPrivateData(REFGUID Name, UINT DataSize, void* pData);
115 HRESULT SetPrivateDataInterface(REFGUID Name, IUnknown pUnknown);
116 HRESULT GetPrivateData(REFGUID Name, UINT* pDataSize, void* pData);
117 HRESULT GetParent(REFIID riid, void** ppParent);
118 }
119
120 interface IDXGIDeviceSubObject : IDXGIObject {
121 extern(Windows) :
122 HRESULT GetDevice(REFIID riid, void** ppDevice);
123 }
124
125 interface IDXGIResource : IDXGIDeviceSubObject {
126 extern(Windows) :
127 HRESULT GetSharedHandle(HANDLE* pSharedHandle);
128 HRESULT GetUsage(DXGI_USAGE* pUsage);
129 HRESULT SetEvictionPriority(UINT EvictionPriority);
130 HRESULT GetEvictionPriority(UINT* pEvictionPriority);
131 }
132
133 interface IDXGISurface : IDXGIDeviceSubObject {
134 extern(Windows) :
135 HRESULT GetDesc(DXGI_SURFACE_DESC* pDesc);
136 HRESULT Map(DXGI_MAPPED_RECT* pLockedRect, UINT MapFlags);
137 HRESULT Unmap();
138 }
139
140 interface IDXGIAdapter : IDXGIObject {
141 extern(Windows) :
142 HRESULT EnumOutputs(UINT Output, IDXGIOutput* ppOutput);
143 HRESULT GetDesc(DXGI_ADAPTER_DESC* pDesc);
144 HRESULT CheckInterfaceSupport(REFGUID InterfaceName, LARGE_INTEGER* pUMDVersion);
145 }
146
147 interface IDXGIOutput : IDXGIObject {
148 extern(Windows) :
149 HRESULT GetDesc(DXGI_OUTPUT_DESC* pDesc);
150 HRESULT GetDisplayModeList(DXGI_FORMAT EnumFormat, UINT Flags, UINT* pNumModes, DXGI_MODE_DESC* pDesc);
151 HRESULT FindClosestMatchingMode(DXGI_MODE_DESC* pModeToMatch, DXGI_MODE_DESC* pClosestMatch, IUnknown pConcernedDevice);
152 HRESULT WaitForVBlank();
153 HRESULT TakeOwnership(IUnknown pDevice, BOOL Exclusive);
154 void ReleaseOwnership();
155 HRESULT GetGammaControlCapabilities(DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps);
156 HRESULT SetGammaControl(DXGI_GAMMA_CONTROL* pArray);
157 HRESULT GetGammaControl(DXGI_GAMMA_CONTROL* pArray);
158 HRESULT SetDisplaySurface(IDXGISurface pScanoutSurface);
159 HRESULT GetDisplaySurfaceData(IDXGISurface pDestination);
160 HRESULT GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats);
161 }
162
163 const DXGI_MAX_SWAP_CHAIN_BUFFERS = 16;
164
165 enum {
166 DXGI_PRESENT_TEST = 0x00000001,
167 DXGI_PRESENT_DO_NOT_SEQUENCE = 0x00000002,
168 DXGI_PRESENT_RESTART = 0x00000004
169 }
170
171 interface IDXGISwapChain : IDXGIDeviceSubObject {
172 extern(Windows) :
173 HRESULT Present(UINT SyncInterval, UINT Flags);
174 HRESULT GetBuffer(UINT Buffer, REFIID riid, void** ppSurface);
175 HRESULT SetFullscreenState(BOOL Fullscreen, IDXGIOutput pTarget);
176 HRESULT GetFullscreenState(BOOL* pFullscreen, IDXGIOutput* ppTarget);
177 HRESULT GetDesc(DXGI_SWAP_CHAIN_DESC* pDesc);
178 HRESULT ResizeBuffers(UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT NewFormat, UINT SwapChainFlags);
179 HRESULT ResizeTarget(DXGI_MODE_DESC* pNewTargetParameters);
180 HRESULT GetContainingOutput(IDXGIOutput* ppOutput);
181 HRESULT GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats);
182 HRESULT GetLastPresentCount(UINT* pLastPresentCount);
183 }
184
185 interface IDXGIFactory : IDXGIObject {
186 extern(Windows) :
187 HRESULT EnumAdapters(UINT Adapter, IDXGIAdapter* ppAdapter);
188 HRESULT MakeWindowAssociation(HWND WindowHandle, UINT Flags);
189 HRESULT GetWindowAssociation(HWND* pWindowHandle);
190 HRESULT CreateSwapChain(IUnknown pDevice, DXGI_SWAP_CHAIN_DESC* pDesc, IDXGISwapChain* ppSwapChain);
191 HRESULT CreateSoftwareAdapter(HMODULE Module, IDXGIAdapter* ppAdapter);
192 }
193
194 interface IDXGIDevice : IDXGIObject {
195 extern(Windows) :
196 HRESULT GetAdapter(IDXGIAdapter* pAdapter);
197 HRESULT CreateSurface(DXGI_SURFACE_DESC* pDesc, UINT NumSurfaces, DXGI_USAGE Usage, DXGI_SHARED_RESOURCE* pSharedResource, IDXGISurface* ppSurface);
198 HRESULT QueryResourceResidency(IUnknown* ppResources, DXGI_RESIDENCY* pResidencyStatus, UINT NumResources);
199 HRESULT SetGPUThreadPriority(INT Priority);
200 HRESULT GetGPUThreadPriority(INT* pPriority);
201 }
202
203 extern(C) const GUID IID_IDXGIObject = {0xaec22fb8, 0x76f3, 0x4639, [0x9b, 0xe0, 0x28, 0xeb, 0x43, 0xa6, 0x7a, 0x2e]};
204 extern(C) const GUID IID_IDXGIDeviceSubObject = {0x3d3e0379, 0xf9de, 0x4d58, [0xbb, 0x6c, 0x18, 0xd6, 0x29, 0x92, 0xf1, 0xa6]};
205 extern(C) const GUID IID_IDXGIResource = {0x035f3ab4, 0x482e, 0x4e50, [0xb4, 0x1f, 0x8a, 0x7f, 0x8b, 0xd8, 0x96, 0x0b]};
206 extern(C) const GUID IID_IDXGISurface = {0xcafcb56c, 0x6ac3, 0x4889, [0xbf, 0x47, 0x9e, 0x23, 0xbb, 0xd2, 0x60, 0xec]};
207 extern(C) const GUID IID_IDXGIAdapter = {0x2411e7e1, 0x12ac, 0x4ccf, [0xbd, 0x14, 0x97, 0x98, 0xe8, 0x53, 0x4d, 0xc0]};
208 extern(C) const GUID IID_IDXGIOutput = {0xae02eedb, 0xc735, 0x4690, [0x8d, 0x52, 0x5a, 0x8d, 0xc2, 0x02, 0x13, 0xaa]};
209 extern(C) const GUID IID_IDXGISwapChain = {0x310d36a0, 0xd2e7, 0x4c0a, [0xaa, 0x04, 0x6a, 0x9d, 0x23, 0xb8, 0x88, 0x6a]};
210 extern(C) const GUID IID_IDXGIFactory = {0x7b7166ec, 0x21c7, 0x44ae, [0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69]};
211 extern(C) const GUID IID_IDXGIDevice = {0x54ec77fa, 0x1377, 0x44e6, [0x8c, 0x32, 0x88, 0xfd, 0x5f, 0x44, 0xc8, 0x4c]};
212