include: Fix __int64 definition for ARM64.
[wine] / include / dxgi.idl
1 /*
2  * Copyright 2007 Andras Kovacs
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 "oaidl.idl";
20 import "ocidl.idl";
21 import "dxgitype.h";
22
23 const UINT _FACDXGI = 0x87a;
24
25 cpp_quote("#define MAKE_DXGI_STATUS(x)                         MAKE_HRESULT(0, _FACDXGI, x)")
26 cpp_quote("#define DXGI_STATUS_OCCLUDED                        MAKE_DXGI_STATUS(1)")
27 cpp_quote("#define DXGI_STATUS_CLIPPED                         MAKE_DXGI_STATUS(2)")
28 cpp_quote("#define DXGI_STATUS_NO_REDIRECTION                  MAKE_DXGI_STATUS(4)")
29 cpp_quote("#define DXGI_STATUS_NO_DESKTOP_ACCESS               MAKE_DXGI_STATUS(5)")
30 cpp_quote("#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE    MAKE_DXGI_STATUS(6)")
31 cpp_quote("#define DXGI_STATUS_MODE_CHANGED                    MAKE_DXGI_STATUS(7)")
32 cpp_quote("#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS         MAKE_DXGI_STATUS(8)")
33
34 cpp_quote("#define MAKE_DXGI_HRESULT(x)                        MAKE_HRESULT(1, _FACDXGI, x)")
35 cpp_quote("#define DXGI_ERROR_INVALID_CALL                     MAKE_DXGI_HRESULT(1)")
36 cpp_quote("#define DXGI_ERROR_NOT_FOUND                        MAKE_DXGI_HRESULT(2)")
37 cpp_quote("#define DXGI_ERROR_MORE_DATA                        MAKE_DXGI_HRESULT(3)")
38 cpp_quote("#define DXGI_ERROR_UNSUPPORTED                      MAKE_DXGI_HRESULT(4)")
39 cpp_quote("#define DXGI_ERROR_DEVICE_REMOVED                   MAKE_DXGI_HRESULT(5)")
40 cpp_quote("#define DXGI_ERROR_DEVICE_HUNG                      MAKE_DXGI_HRESULT(6)")
41 cpp_quote("#define DXGI_ERROR_DEVICE_RESET                     MAKE_DXGI_HRESULT(7)")
42 cpp_quote("#define DXGI_ERROR_WAS_STILL_DRAWING                MAKE_DXGI_HRESULT(10)")
43 cpp_quote("#define DXGI_ERROR_FRAME_STATISTICS_DISJOINT        MAKE_DXGI_HRESULT(11)")
44 cpp_quote("#define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE     MAKE_DXGI_HRESULT(12)")
45 cpp_quote("#define DXGI_ERROR_DRIVER_INTERNAL_ERROR            MAKE_DXGI_HRESULT(32)")
46 cpp_quote("#define DXGI_ERROR_NONEXCLUSIVE                     MAKE_DXGI_HRESULT(33)")
47 cpp_quote("#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE          MAKE_DXGI_HRESULT(34)")
48
49 cpp_quote("#if 0")
50 typedef HANDLE HMONITOR;
51 typedef struct _LUID {
52     DWORD LowPart;
53     LONG HighPart;
54 } LUID, *PLUID;
55 cpp_quote("#endif")
56
57 typedef UINT DXGI_USAGE;
58 const DXGI_USAGE DXGI_USAGE_SHADER_INPUT            = 0x10L;
59 const DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT    = 0x20L;
60 const DXGI_USAGE DXGI_USAGE_BACK_BUFFER             = 0x40L;
61 const DXGI_USAGE DXGI_USAGE_SHARED                  = 0x80L;
62 const DXGI_USAGE DXGI_USAGE_READ_ONLY               = 0x100L;
63
64 const UINT DXGI_ENUM_MODES_INTERLACED               = 1;
65 const UINT DXGI_ENUM_MODES_SCALING                  = 2;
66
67 typedef enum DXGI_SWAP_EFFECT {
68     DXGI_SWAP_EFFECT_DISCARD    = 0,
69     DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
70 } DXGI_SWAP_EFFECT;
71
72 typedef enum DXGI_RESIDENCY {
73     DXGI_RESIDENCY_FULLY_RESIDENT               = 1,
74     DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY    = 2,
75     DXGI_RESIDENCY_EVICTED_TO_DISK              = 3,
76 } DXGI_RESIDENCY;
77
78 typedef struct DXGI_SURFACE_DESC {
79     UINT Width;
80     UINT Height;
81     DXGI_FORMAT Format;
82     DXGI_SAMPLE_DESC SampleDesc;
83 } DXGI_SURFACE_DESC;
84
85 typedef struct DXGI_MAPPED_RECT {
86     INT Pitch;
87     BYTE *pBits;
88 } DXGI_MAPPED_RECT;
89
90 typedef struct DXGI_OUTPUT_DESC {
91     WCHAR DeviceName[32];
92     RECT DesktopCoordinates;
93     BOOL AttachedToDesktop;
94     DXGI_MODE_ROTATION Rotation;
95     HMONITOR Monitor;
96 } DXGI_OUTPUT_DESC;
97
98 typedef struct DXGI_FRAME_STATISTICS {
99     UINT PresentCount;
100     UINT PresentRefreshCount;
101     UINT SyncRefreshCount;
102     LARGE_INTEGER SyncQPCTime;
103     LARGE_INTEGER SyncGPUTime;
104 } DXGI_FRAME_STATISTICS;
105
106 typedef struct DXGI_ADAPTER_DESC {
107     WCHAR Description[128];
108     UINT VendorId;
109     UINT DeviceId;
110     UINT SubSysId;
111     UINT Revision;
112     SIZE_T DedicatedVideoMemory;
113     SIZE_T DedicatedSystemMemory;
114     SIZE_T SharedSystemMemory;
115     LUID AdapterLuid;
116 } DXGI_ADAPTER_DESC;
117
118 typedef enum DXGI_SWAP_CHAIN_FLAG {
119     DXGI_SWAP_CHAIN_FLAG_NONPREROTATED      = 1,
120     DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH  = 2,
121     DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE     = 4
122 } DXGI_SWAP_CHAIN_FLAG;
123
124 typedef struct DXGI_SWAP_CHAIN_DESC {
125     DXGI_MODE_DESC BufferDesc;
126     DXGI_SAMPLE_DESC SampleDesc;
127     DXGI_USAGE BufferUsage;
128     UINT BufferCount;
129     HWND OutputWindow;
130     BOOL Windowed;
131     DXGI_SWAP_EFFECT SwapEffect;
132     UINT Flags;
133 } DXGI_SWAP_CHAIN_DESC;
134
135 typedef struct DXGI_SHARED_RESOURCE {
136     HANDLE Handle;
137 } DXGI_SHARED_RESOURCE;
138
139 [
140     object,
141     local,
142     uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e)
143 ]
144 interface IDXGIObject : IUnknown
145 {
146     HRESULT SetPrivateData(
147         [in] REFGUID guid,
148         [in] UINT data_size,
149         [in] const void *data
150     );
151     HRESULT SetPrivateDataInterface(
152         [in] REFGUID guid,
153         [in] const IUnknown *object
154     );
155     HRESULT GetPrivateData(
156         [in] REFGUID guid,
157         [in, out] UINT *data_size,
158         [out] void *data
159     );
160     HRESULT GetParent(
161         [in] REFIID riid,
162         [out] void **parent
163     );
164 }
165
166 [
167     object,
168     local,
169     uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6)
170 ]
171 interface IDXGIDeviceSubObject : IDXGIObject
172 {
173     HRESULT GetDevice(
174         [in] REFIID riid,
175         [out] void **device
176     );
177 }
178
179 [
180     object,
181     uuid(035f3ab4-482e-4e50-b41f-8a7f8bd8960b),
182     local,
183     pointer_default(unique)
184 ]
185 interface IDXGIResource : IDXGIDeviceSubObject
186 {
187     HRESULT GetSharedHandle([out] HANDLE *pSharedHandle);
188     HRESULT GetUsage([out] DXGI_USAGE *pUsage);
189     HRESULT SetEvictionPriority([in] UINT EvictionPriority);
190     HRESULT GetEvictionPriority([out, retval] UINT *pEvictionPriority);
191 }
192
193 [
194     object,
195     uuid(9d8e1289-d7b3-465f-8126-250e349af85d),
196     local,
197     pointer_default(unique)
198 ]
199 interface IDXGIKeyedMutex : IDXGIDeviceSubObject
200 {
201     HRESULT AcquireSync([in] UINT64 Key, [in] DWORD dwMilliseconds);
202     HRESULT ReleaseSync([in] UINT64 Key);
203 }
204
205 [
206     object,
207     local,
208     uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec)
209 ]
210 interface IDXGISurface : IDXGIDeviceSubObject
211 {
212     HRESULT GetDesc(
213         [out] DXGI_SURFACE_DESC *desc
214     );
215     HRESULT Map(
216         [out] DXGI_MAPPED_RECT *mapped_rect,
217         [in] UINT flags
218     );
219     HRESULT Unmap(
220     );
221 }
222
223 [
224     object,
225     local,
226     uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa)
227 ]
228 interface IDXGIOutput : IDXGIObject
229 {
230     HRESULT GetDesc(
231         [out] DXGI_OUTPUT_DESC *desc
232     );
233     HRESULT GetDisplayModeList(
234         [in] DXGI_FORMAT format,
235         [in] UINT flags,
236         [in, out] UINT *mode_count,
237         [out] DXGI_MODE_DESC *desc
238     );
239     HRESULT FindClosestMatchingMode(
240         [in] const DXGI_MODE_DESC *mode,
241         [out] DXGI_MODE_DESC *closest_match,
242         [in] IUnknown *device
243     );
244     HRESULT WaitForVBlank(
245     );
246     HRESULT TakeOwnership(
247         [in] IUnknown *device,
248         [in] BOOL exclusive
249     );
250     void ReleaseOwnership(
251     );
252     HRESULT GetGammaControlCapabilities(
253         [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps
254     );
255     HRESULT SetGammaControl(
256         [in] const DXGI_GAMMA_CONTROL *gamma_control
257     );
258     HRESULT GetGammaControl(
259         [out] DXGI_GAMMA_CONTROL *gamma_control
260     );
261     HRESULT SetDisplaySurface(
262         [in] IDXGISurface *surface
263     );
264     HRESULT GetDisplaySurfaceData(
265         [in] IDXGISurface *surface
266     );
267     HRESULT GetFrameStatistics(
268         [out] DXGI_FRAME_STATISTICS *stats
269     );
270 }
271
272 [
273     object,
274     local,
275     uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0)
276 ]
277 interface IDXGIAdapter : IDXGIObject
278 {
279     HRESULT EnumOutputs(
280         [in] UINT output_idx,
281         [in, out] IDXGIOutput **output
282     );
283     HRESULT GetDesc(
284         [out] DXGI_ADAPTER_DESC *desc
285     );
286     HRESULT CheckInterfaceSupport(
287         [in] REFGUID guid,
288         [out] LARGE_INTEGER *umd_version
289     );
290 }
291
292 [
293     object,
294     local,
295     uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a)
296 ]
297 interface IDXGISwapChain : IDXGIDeviceSubObject
298 {
299     HRESULT Present(
300         [in] UINT sync_interval,
301         [in] UINT flags
302     );
303     HRESULT GetBuffer(
304         [in] UINT buffer_idx,
305         [in] REFIID riid,
306         [in, out] void **surface
307     );
308     HRESULT SetFullscreenState(
309         [in] BOOL fullscreen,
310         [in] IDXGIOutput *target
311     );
312     HRESULT GetFullscreenState(
313         [out] BOOL *fullscreen,
314         [out] IDXGIOutput **target
315     );
316     HRESULT GetDesc(
317         [out] DXGI_SWAP_CHAIN_DESC *desc
318     );
319     HRESULT ResizeBuffers(
320         [in] UINT buffer_count,
321         [in] UINT width,
322         [in] UINT height,
323         [in] DXGI_FORMAT format,
324         [in] UINT flags
325     );
326     HRESULT ResizeTarget(
327         [in] const DXGI_MODE_DESC *target_mode_desc
328     );
329     HRESULT GetContainingOutput(
330         [out] IDXGIOutput **output
331     );
332     HRESULT GetFrameStatistics(
333         [out] DXGI_FRAME_STATISTICS *stats
334     );
335     HRESULT GetLastPresentCount(
336         [out] UINT *last_present_count
337     );
338 }
339
340 cpp_quote("#define DXGI_MWA_NO_WINDOW_CHANGES  0x1")
341 cpp_quote("#define DXGI_MWA_NO_ALT_ENTER       0x2")
342 cpp_quote("#define DXGI_MWA_NO_PRINT_SCREEN    0x4")
343 cpp_quote("#define DXGI_MWA_VALID              0x7")
344
345 [
346     object,
347     local,
348     uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369)
349 ]
350 interface IDXGIFactory : IDXGIObject
351 {
352     HRESULT EnumAdapters(
353         [in] UINT adapter_idx,
354         [out] IDXGIAdapter **adapter
355     );
356     HRESULT MakeWindowAssociation(
357         [in] HWND window,
358         [in] UINT flags
359     );
360     HRESULT GetWindowAssociation(
361         [in] HWND *window
362     );
363     HRESULT CreateSwapChain(
364         [in] IUnknown *device,
365         [in] DXGI_SWAP_CHAIN_DESC *desc,
366         [out] IDXGISwapChain **swapchain
367     );
368     HRESULT CreateSoftwareAdapter(
369         [in] HMODULE swrast,
370         [out] IDXGIAdapter **adapter
371     );
372 }
373
374 [local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory);
375
376 [
377     object,
378     local,
379     uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c)
380 ]
381 interface IDXGIDevice : IDXGIObject
382 {
383     HRESULT GetAdapter(
384         [out] IDXGIAdapter **adapter
385     );
386     HRESULT CreateSurface(
387         [in] const DXGI_SURFACE_DESC *desc,
388         [in] UINT surface_count,
389         [in] DXGI_USAGE usage,
390         [in] const DXGI_SHARED_RESOURCE *shared_resource,
391         [out] IDXGISurface **surface
392     );
393     HRESULT QueryResourceResidency(
394         [in] IUnknown *const *resources,
395         [out] DXGI_RESIDENCY *residency,
396         [in] UINT resource_count
397     );
398     HRESULT SetGPUThreadPriority(
399         [in] INT priority
400     );
401     HRESULT GetGPUThreadPriority(
402         [out] INT *priority
403     );
404 }
405
406 typedef enum DXGI_ADAPTER_FLAG {
407     DXGI_ADAPTER_FLAG_NONE         = 0,
408     DXGI_ADAPTER_FLAG_REMOTE       = 1,
409     DXGI_ADAPTER_FLAG_FORCE_DWORD  = 0xFFFFFFFF
410 } DXGI_ADAPTER_FLAG;
411
412 typedef struct DXGI_ADAPTER_DESC1 {
413     WCHAR  Description[128];
414     UINT   VendorId;
415     UINT   DeviceId;
416     UINT   SubSysId;
417     UINT   Revision;
418     SIZE_T DedicatedVideoMemory;
419     SIZE_T DedicatedSystemMemory;
420     SIZE_T SharedSystemMemory;
421     LUID   AdapterLuid;
422     UINT   Flags;
423 } DXGI_ADAPTER_DESC1;
424
425 [
426     object,
427     uuid(29038f61-3839-4626-91fd-086879011a05),
428     local,
429     pointer_default(unique)
430 ]
431 interface IDXGIAdapter1 : IDXGIAdapter
432 {
433     HRESULT GetDesc1([out] DXGI_ADAPTER_DESC1 *pDesc);
434 }
435
436 [
437     object,
438     uuid(770aae78-f26f-4dba-a829-253c83d1b387),
439     local,
440     pointer_default(unique)
441  ]
442 interface IDXGIFactory1 : IDXGIFactory
443 {
444     HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter);
445     BOOL IsCurrent();
446 }