1 | /*
|
---|
2 | * Copyright 2014 Jacek Caban for CodeWeavers
|
---|
3 | *
|
---|
4 | * This library is free software; you can redistribute it and/or
|
---|
5 | * modify it under the terms of the GNU Lesser General Public
|
---|
6 | * License as published by the Free Software Foundation; either
|
---|
7 | * version 2.1 of the License, or (at your option) any later version.
|
---|
8 | *
|
---|
9 | * This library is distributed in the hope that it will be useful,
|
---|
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
12 | * Lesser General Public License for more details.
|
---|
13 | *
|
---|
14 | * You should have received a copy of the GNU Lesser General Public
|
---|
15 | * License along with this library; if not, write to the Free Software
|
---|
16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
---|
17 | */
|
---|
18 |
|
---|
19 | import "dxgi.idl";
|
---|
20 |
|
---|
21 | const UINT DXGI_ENUM_MODES_STEREO = 0x4;
|
---|
22 | const UINT DXGI_ENUM_MODES_DISABLED_STEREO = 0x8;
|
---|
23 |
|
---|
24 | const DWORD DXGI_SHARED_RESOURCE_READ = 0x80000000;
|
---|
25 | const DWORD DXGI_SHARED_RESOURCE_WRITE = 0x00000001;
|
---|
26 |
|
---|
27 | typedef enum _DXGI_OFFER_RESOURCE_PRIORITY {
|
---|
28 | DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1,
|
---|
29 | DXGI_OFFER_RESOURCE_PRIORITY_NORMAL,
|
---|
30 | DXGI_OFFER_RESOURCE_PRIORITY_HIGH
|
---|
31 | } DXGI_OFFER_RESOURCE_PRIORITY;
|
---|
32 |
|
---|
33 | typedef enum DXGI_ALPHA_MODE {
|
---|
34 | DXGI_ALPHA_MODE_UNSPECIFIED = 0,
|
---|
35 | DXGI_ALPHA_MODE_PREMULTIPLIED = 1,
|
---|
36 | DXGI_ALPHA_MODE_STRAIGHT = 2,
|
---|
37 | DXGI_ALPHA_MODE_IGNORE = 3,
|
---|
38 | DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff
|
---|
39 | } DXGI_ALPHA_MODE;
|
---|
40 |
|
---|
41 | typedef struct DXGI_OUTDUPL_MOVE_RECT
|
---|
42 | {
|
---|
43 | POINT SourcePoint;
|
---|
44 | RECT DestinationRect;
|
---|
45 | } DXGI_OUTDUPL_MOVE_RECT;
|
---|
46 |
|
---|
47 | typedef struct DXGI_OUTDUPL_DESC
|
---|
48 | {
|
---|
49 | DXGI_MODE_DESC ModeDesc;
|
---|
50 | DXGI_MODE_ROTATION Rotation;
|
---|
51 | BOOL DesktopImageInSystemMemory;
|
---|
52 | } DXGI_OUTDUPL_DESC;
|
---|
53 |
|
---|
54 | typedef struct DXGI_OUTDUPL_POINTER_POSITION
|
---|
55 | {
|
---|
56 | POINT Position;
|
---|
57 | BOOL Visible;
|
---|
58 | } DXGI_OUTDUPL_POINTER_POSITION;
|
---|
59 |
|
---|
60 | typedef enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE
|
---|
61 | {
|
---|
62 | DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001,
|
---|
63 | DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002,
|
---|
64 | DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004
|
---|
65 | } DXGI_OUTDUPL_POINTER_SHAPE_TYPE;
|
---|
66 |
|
---|
67 | typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO
|
---|
68 | {
|
---|
69 | UINT Type;
|
---|
70 | UINT Width;
|
---|
71 | UINT Height;
|
---|
72 | UINT Pitch;
|
---|
73 | POINT HotSpot;
|
---|
74 | } DXGI_OUTDUPL_POINTER_SHAPE_INFO;
|
---|
75 |
|
---|
76 | typedef struct DXGI_OUTDUPL_FRAME_INFO
|
---|
77 | {
|
---|
78 | LARGE_INTEGER LastPresentTime;
|
---|
79 | LARGE_INTEGER LastMouseUpdateTime;
|
---|
80 | UINT AccumulatedFrames;
|
---|
81 | BOOL RectsCoalesced;
|
---|
82 | BOOL ProtectedContentMaskedOut;
|
---|
83 | DXGI_OUTDUPL_POINTER_POSITION PointerPosition;
|
---|
84 | UINT TotalMetadataBufferSize;
|
---|
85 | UINT PointerShapeBufferSize;
|
---|
86 | } DXGI_OUTDUPL_FRAME_INFO;
|
---|
87 |
|
---|
88 | typedef struct DXGI_MODE_DESC1
|
---|
89 | {
|
---|
90 | UINT Width;
|
---|
91 | UINT Height;
|
---|
92 | DXGI_RATIONAL RefreshRate;
|
---|
93 | DXGI_FORMAT Format;
|
---|
94 | DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
|
---|
95 | DXGI_MODE_SCALING Scaling;
|
---|
96 | BOOL Stereo;
|
---|
97 | } DXGI_MODE_DESC1;
|
---|
98 |
|
---|
99 | [
|
---|
100 | object,
|
---|
101 | uuid(191cfac3-a341-470d-b26e-a864f428319c),
|
---|
102 | local,
|
---|
103 | pointer_default(unique)
|
---|
104 | ]
|
---|
105 | interface IDXGIOutputDuplication : IDXGIObject
|
---|
106 | {
|
---|
107 | void GetDesc(
|
---|
108 | [out] DXGI_OUTDUPL_DESC *desc
|
---|
109 | );
|
---|
110 |
|
---|
111 | HRESULT AcquireNextFrame(
|
---|
112 | [in] UINT timeout_in_milliseconds,
|
---|
113 | [out] DXGI_OUTDUPL_FRAME_INFO *frame_info,
|
---|
114 | [out] IDXGIResource **desktop_resource
|
---|
115 | );
|
---|
116 |
|
---|
117 | HRESULT GetFrameDirtyRects(
|
---|
118 | [in] UINT dirty_rects_buffer_size,
|
---|
119 | [out] RECT *dirty_rects_buffer,
|
---|
120 | [out] UINT *dirty_rects_buffer_size_required
|
---|
121 | );
|
---|
122 |
|
---|
123 | HRESULT GetFrameMoveRects(
|
---|
124 | [in] UINT move_rects_buffer_size,
|
---|
125 | [out] DXGI_OUTDUPL_MOVE_RECT *move_rect_buffer,
|
---|
126 | [out] UINT *move_rects_buffer_size_required
|
---|
127 | );
|
---|
128 |
|
---|
129 | HRESULT GetFramePointerShape(
|
---|
130 | [in] UINT pointer_shape_buffer_size,
|
---|
131 | [out] void *pointer_shape_buffer,
|
---|
132 | [out] UINT *pointer_shape_buffer_size_required,
|
---|
133 | [out] DXGI_OUTDUPL_POINTER_SHAPE_INFO *pointer_shape_info
|
---|
134 | );
|
---|
135 |
|
---|
136 | HRESULT MapDesktopSurface(
|
---|
137 | [out] DXGI_MAPPED_RECT *locked_rect
|
---|
138 | );
|
---|
139 |
|
---|
140 | HRESULT UnMapDesktopSurface();
|
---|
141 |
|
---|
142 | HRESULT ReleaseFrame();
|
---|
143 | }
|
---|
144 |
|
---|
145 | [
|
---|
146 | object,
|
---|
147 | uuid(aba496dd-b617-4cb8-a866-bc44d7eb1fa2),
|
---|
148 | local,
|
---|
149 | pointer_default(unique)
|
---|
150 | ]
|
---|
151 | interface IDXGISurface2 : IDXGISurface1
|
---|
152 | {
|
---|
153 | HRESULT GetResource(
|
---|
154 | [in] REFIID iid,
|
---|
155 | [out] void **parent_resource,
|
---|
156 | [out] UINT *subresource_idx
|
---|
157 | );
|
---|
158 | }
|
---|
159 |
|
---|
160 | [
|
---|
161 | object,
|
---|
162 | uuid(30961379-4609-4a41-998e-54fe567ee0c1),
|
---|
163 | local,
|
---|
164 | pointer_default(unique)
|
---|
165 | ]
|
---|
166 | interface IDXGIResource1 : IDXGIResource
|
---|
167 | {
|
---|
168 | HRESULT CreateSubresourceSurface(
|
---|
169 | UINT index,
|
---|
170 | [out] IDXGISurface2 **surface
|
---|
171 | );
|
---|
172 | HRESULT CreateSharedHandle(
|
---|
173 | [in] const SECURITY_ATTRIBUTES *attributes,
|
---|
174 | [in] DWORD access,
|
---|
175 | [in] const WCHAR *name,
|
---|
176 | [out] HANDLE *handle
|
---|
177 | );
|
---|
178 | }
|
---|
179 |
|
---|
180 | [
|
---|
181 | object,
|
---|
182 | uuid(ea9dbf1a-c88e-4486-854a-98aa0138f30c),
|
---|
183 | local,
|
---|
184 | pointer_default(unique)
|
---|
185 | ]
|
---|
186 | interface IDXGIDisplayControl : IUnknown
|
---|
187 | {
|
---|
188 | BOOL IsStereoEnabled();
|
---|
189 | void SetStereoEnabled(BOOL enabled);
|
---|
190 | }
|
---|
191 |
|
---|
192 | [
|
---|
193 | object,
|
---|
194 | uuid(05008617-fbfd-4051-a790-144884b4f6a9),
|
---|
195 | local,
|
---|
196 | pointer_default(unique)
|
---|
197 | ]
|
---|
198 | interface IDXGIDevice2 : IDXGIDevice1
|
---|
199 | {
|
---|
200 | HRESULT OfferResources(
|
---|
201 | [in] UINT NumResources,
|
---|
202 | [in, size_is(NumResources)] IDXGIResource *const *ppResources,
|
---|
203 | [in] DXGI_OFFER_RESOURCE_PRIORITY Priority);
|
---|
204 |
|
---|
205 | HRESULT ReclaimResources(
|
---|
206 | [in] UINT NumResources,
|
---|
207 | [in, size_is(NumResources)] IDXGIResource *const *ppResources,
|
---|
208 | [out, size_is(NumResources)] BOOL *pDiscarded);
|
---|
209 |
|
---|
210 | HRESULT EnqueueSetEvent(
|
---|
211 | [in] HANDLE hEvent);
|
---|
212 | }
|
---|
213 |
|
---|
214 | typedef enum DXGI_SCALING {
|
---|
215 | DXGI_SCALING_STRETCH = 0,
|
---|
216 | DXGI_SCALING_NONE = 1,
|
---|
217 | DXGI_SCALING_ASPECT_RATIO_STRETCH = 2,
|
---|
218 | } DXGI_SCALING;
|
---|
219 |
|
---|
220 | typedef struct DXGI_SWAP_CHAIN_DESC1 {
|
---|
221 | UINT Width;
|
---|
222 | UINT Height;
|
---|
223 | DXGI_FORMAT Format;
|
---|
224 | BOOL Stereo;
|
---|
225 | DXGI_SAMPLE_DESC SampleDesc;
|
---|
226 | DXGI_USAGE BufferUsage;
|
---|
227 | UINT BufferCount;
|
---|
228 | DXGI_SCALING Scaling;
|
---|
229 | DXGI_SWAP_EFFECT SwapEffect;
|
---|
230 | DXGI_ALPHA_MODE AlphaMode;
|
---|
231 | UINT Flags;
|
---|
232 | } DXGI_SWAP_CHAIN_DESC1;
|
---|
233 |
|
---|
234 | typedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC {
|
---|
235 | DXGI_RATIONAL RefreshRate;
|
---|
236 | DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
|
---|
237 | DXGI_MODE_SCALING Scaling;
|
---|
238 | BOOL Windowed;
|
---|
239 | } DXGI_SWAP_CHAIN_FULLSCREEN_DESC;
|
---|
240 |
|
---|
241 | typedef struct DXGI_PRESENT_PARAMETERS {
|
---|
242 | UINT DirtyRectsCount;
|
---|
243 | RECT *pDirtyRects;
|
---|
244 | RECT *pScrollRect;
|
---|
245 | POINT *pScrollOffset;
|
---|
246 | } DXGI_PRESENT_PARAMETERS;
|
---|
247 |
|
---|
248 | [
|
---|
249 | object,
|
---|
250 | uuid(790a45f7-0d42-4876-983a-0a55cfe6f4aa),
|
---|
251 | local,
|
---|
252 | pointer_default(unique)
|
---|
253 | ]
|
---|
254 | interface IDXGISwapChain1 : IDXGISwapChain
|
---|
255 | {
|
---|
256 | HRESULT GetDesc1(
|
---|
257 | [out] DXGI_SWAP_CHAIN_DESC1 *pDesc);
|
---|
258 |
|
---|
259 | HRESULT GetFullscreenDesc(
|
---|
260 | [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc);
|
---|
261 |
|
---|
262 | HRESULT GetHwnd(
|
---|
263 | [out] HWND *pHwnd);
|
---|
264 |
|
---|
265 | HRESULT GetCoreWindow(
|
---|
266 | [in] REFIID refiid,
|
---|
267 | [out] void **ppUnk);
|
---|
268 |
|
---|
269 | HRESULT Present1(
|
---|
270 | [in] UINT SyncInterval,
|
---|
271 | [in] UINT PresentFlags,
|
---|
272 | [in] const DXGI_PRESENT_PARAMETERS *pPresentParameters);
|
---|
273 |
|
---|
274 | BOOL IsTemporaryMonoSupported();
|
---|
275 |
|
---|
276 | HRESULT GetRestrictToOutput(
|
---|
277 | [out] IDXGIOutput **ppRestrictToOutput);
|
---|
278 |
|
---|
279 | HRESULT SetBackgroundColor(
|
---|
280 | [in] const DXGI_RGBA *pColor);
|
---|
281 |
|
---|
282 | HRESULT GetBackgroundColor(
|
---|
283 | [out] DXGI_RGBA *pColor);
|
---|
284 |
|
---|
285 | HRESULT SetRotation(
|
---|
286 | [in] DXGI_MODE_ROTATION Rotation);
|
---|
287 |
|
---|
288 | HRESULT GetRotation(
|
---|
289 | [out] DXGI_MODE_ROTATION *pRotation);
|
---|
290 | }
|
---|
291 |
|
---|
292 | [
|
---|
293 | object,
|
---|
294 | uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0),
|
---|
295 | local,
|
---|
296 | pointer_default(unique)
|
---|
297 | ]
|
---|
298 | interface IDXGIFactory2 : IDXGIFactory1
|
---|
299 | {
|
---|
300 | BOOL IsWindowedStereoEnabled();
|
---|
301 |
|
---|
302 | HRESULT CreateSwapChainForHwnd(
|
---|
303 | [in] IUnknown *pDevice,
|
---|
304 | [in] HWND hWnd,
|
---|
305 | [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
---|
306 | [in] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc,
|
---|
307 | [in] IDXGIOutput *pRestrictToOutput,
|
---|
308 | [out] IDXGISwapChain1 **ppSwapChain);
|
---|
309 |
|
---|
310 | HRESULT CreateSwapChainForCoreWindow(
|
---|
311 | [in] IUnknown *pDevice,
|
---|
312 | [in] IUnknown *pWindow,
|
---|
313 | [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
---|
314 | [in] IDXGIOutput *pRestrictToOutput,
|
---|
315 | [out] IDXGISwapChain1 **ppSwapChain);
|
---|
316 |
|
---|
317 | HRESULT GetSharedResourceAdapterLuid(
|
---|
318 | [in] HANDLE hResource,
|
---|
319 | [out] LUID *pLuid);
|
---|
320 |
|
---|
321 | HRESULT RegisterStereoStatusWindow(
|
---|
322 | [in] HWND WindowHandle,
|
---|
323 | [in] UINT wMsg,
|
---|
324 | [out] DWORD *pdwCookie);
|
---|
325 |
|
---|
326 | HRESULT RegisterStereoStatusEvent(
|
---|
327 | [in] HANDLE hEvent,
|
---|
328 | [out] DWORD *pdwCookie);
|
---|
329 |
|
---|
330 | void UnregisterStereoStatus(
|
---|
331 | [in] DWORD dwCookie);
|
---|
332 |
|
---|
333 | HRESULT RegisterOcclusionStatusWindow(
|
---|
334 | [in] HWND WindowHandle,
|
---|
335 | [in] UINT wMsg,
|
---|
336 | [out] DWORD *pdwCookie);
|
---|
337 |
|
---|
338 | HRESULT RegisterOcclusionStatusEvent(
|
---|
339 | [in] HANDLE hEvent,
|
---|
340 | [out] DWORD *pdwCookie);
|
---|
341 |
|
---|
342 | void UnregisterOcclusionStatus(
|
---|
343 | [in] DWORD dwCookie);
|
---|
344 |
|
---|
345 | HRESULT CreateSwapChainForComposition(
|
---|
346 | [in] IUnknown *pDevice,
|
---|
347 | [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
|
---|
348 | [in] IDXGIOutput *pRestrictToOutput,
|
---|
349 | [out] IDXGISwapChain1 **ppSwapChain);
|
---|
350 | }
|
---|
351 |
|
---|
352 | typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
|
---|
353 | DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY,
|
---|
354 | DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY,
|
---|
355 | DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY,
|
---|
356 | DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY,
|
---|
357 | DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY
|
---|
358 | } DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
|
---|
359 |
|
---|
360 | typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
|
---|
361 | DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY,
|
---|
362 | DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY,
|
---|
363 | DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY,
|
---|
364 | DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY,
|
---|
365 | DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY
|
---|
366 | } DXGI_COMPUTE_PREEMPTION_GRANULARITY;
|
---|
367 |
|
---|
368 | typedef struct DXGI_ADAPTER_DESC2 {
|
---|
369 | WCHAR Description[128];
|
---|
370 | UINT VendorId;
|
---|
371 | UINT DeviceId;
|
---|
372 | UINT SubSysId;
|
---|
373 | UINT Revision;
|
---|
374 | SIZE_T DedicatedVideoMemory;
|
---|
375 | SIZE_T DedicatedSystemMemory;
|
---|
376 | SIZE_T SharedSystemMemory;
|
---|
377 | LUID AdapterLuid;
|
---|
378 | UINT Flags;
|
---|
379 | DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
|
---|
380 | DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;
|
---|
381 | } DXGI_ADAPTER_DESC2;
|
---|
382 |
|
---|
383 | [
|
---|
384 | object,
|
---|
385 | uuid(0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5),
|
---|
386 | local,
|
---|
387 | pointer_default(unique)
|
---|
388 | ]
|
---|
389 | interface IDXGIAdapter2 : IDXGIAdapter1
|
---|
390 | {
|
---|
391 | HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc);
|
---|
392 | }
|
---|
393 |
|
---|
394 | [
|
---|
395 | object,
|
---|
396 | uuid(00cddea8-939b-4b83-a340-a685226666cc),
|
---|
397 | local,
|
---|
398 | pointer_default(unique)
|
---|
399 | ]
|
---|
400 | interface IDXGIOutput1 : IDXGIOutput
|
---|
401 | {
|
---|
402 | HRESULT GetDisplayModeList1(
|
---|
403 | [in] DXGI_FORMAT enum_format,
|
---|
404 | [in] UINT flags,
|
---|
405 | [in, out] UINT *num_modes,
|
---|
406 | [out] DXGI_MODE_DESC1 *desc
|
---|
407 | );
|
---|
408 |
|
---|
409 | HRESULT FindClosestMatchingMode1(
|
---|
410 | [in] const DXGI_MODE_DESC1 *mode_to_match,
|
---|
411 | [out] DXGI_MODE_DESC1 *closest_match,
|
---|
412 | [in] IUnknown *concerned_device
|
---|
413 | );
|
---|
414 |
|
---|
415 | HRESULT GetDisplaySurfaceData1(
|
---|
416 | [in] IDXGIResource *destination
|
---|
417 | );
|
---|
418 |
|
---|
419 | HRESULT DuplicateOutput(
|
---|
420 | [in] IUnknown *device,
|
---|
421 | [out] IDXGIOutputDuplication **output_duplication
|
---|
422 | );
|
---|
423 | }
|
---|