dinput: SetActionMap setting the device buffer.
[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 struct DXGI_SWAP_CHAIN_DESC {
119     DXGI_MODE_DESC BufferDesc;
120     DXGI_SAMPLE_DESC SampleDesc;
121     DXGI_USAGE BufferUsage;
122     UINT BufferCount;
123     HWND OutputWindow;
124     BOOL Windowed;
125     DXGI_SWAP_EFFECT SwapEffect;
126     UINT Flags;
127 } DXGI_SWAP_CHAIN_DESC;
128
129 typedef struct DXGI_SHARED_RESOURCE {
130     HANDLE Handle;
131 } DXGI_SHARED_RESOURCE;
132
133 [
134     object,
135     local,
136     uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e)
137 ]
138 interface IDXGIObject : IUnknown
139 {
140     HRESULT SetPrivateData(
141         [in] REFGUID guid,
142         [in] UINT data_size,
143         [in] const void *data
144     );
145     HRESULT SetPrivateDataInterface(
146         [in] REFGUID guid,
147         [in] const IUnknown *object
148     );
149     HRESULT GetPrivateData(
150         [in] REFGUID guid,
151         [in, out] UINT *data_size,
152         [out] void *data
153     );
154     HRESULT GetParent(
155         [in] REFIID riid,
156         [out] void **parent
157     );
158 }
159
160 [
161     object,
162     local,
163     uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6)
164 ]
165 interface IDXGIDeviceSubObject : IDXGIObject
166 {
167     HRESULT GetDevice(
168         [in] REFIID riid,
169         [out] void **device
170     );
171 }
172
173 [
174     object,
175     local,
176     uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec)
177 ]
178 interface IDXGISurface : IDXGIDeviceSubObject
179 {
180     HRESULT GetDesc(
181         [out] DXGI_SURFACE_DESC *desc
182     );
183     HRESULT Map(
184         [out] DXGI_MAPPED_RECT *mapped_rect,
185         [in] UINT flags
186     );
187     HRESULT Unmap(
188     );
189 }
190
191 [
192     object,
193     local,
194     uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa)
195 ]
196 interface IDXGIOutput : IDXGIObject
197 {
198     HRESULT GetDesc(
199         [out] DXGI_OUTPUT_DESC *desc
200     );
201     HRESULT GetDisplayModeList(
202         [in] DXGI_FORMAT format,
203         [in] UINT flags,
204         [in, out] UINT *mode_count,
205         [out] DXGI_MODE_DESC *desc
206     );
207     HRESULT FindClosestMatchingMode(
208         [in] const DXGI_MODE_DESC *mode,
209         [out] DXGI_MODE_DESC *closest_match,
210         [in] IUnknown *device
211     );
212     HRESULT WaitForVBlank(
213     );
214     HRESULT TakeOwnership(
215         [in] IUnknown *device,
216         [in] BOOL exclusive
217     );
218     void ReleaseOwnership(
219     );
220     HRESULT GetGammaControlCapabilities(
221         [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps
222     );
223     HRESULT SetGammaControl(
224         [in] const DXGI_GAMMA_CONTROL *gamma_control
225     );
226     HRESULT GetGammaControl(
227         [out] DXGI_GAMMA_CONTROL *gamma_control
228     );
229     HRESULT SetDisplaySurface(
230         [in] IDXGISurface *surface
231     );
232     HRESULT GetDisplaySurfaceData(
233         [in] IDXGISurface *surface
234     );
235     HRESULT GetFrameStatistics(
236         [out] DXGI_FRAME_STATISTICS *stats
237     );
238 }
239
240 [
241     object,
242     local,
243     uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0)
244 ]
245 interface IDXGIAdapter : IDXGIObject
246 {
247     HRESULT EnumOutputs(
248         [in] UINT output_idx,
249         [in, out] IDXGIOutput **output
250     );
251     HRESULT GetDesc(
252         [out] DXGI_ADAPTER_DESC *desc
253     );
254     HRESULT CheckInterfaceSupport(
255         [in] REFGUID guid,
256         [out] LARGE_INTEGER *umd_version
257     );
258 }
259
260 [
261     object,
262     local,
263     uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a)
264 ]
265 interface IDXGISwapChain : IDXGIDeviceSubObject
266 {
267     HRESULT Present(
268         [in] UINT sync_interval,
269         [in] UINT flags
270     );
271     HRESULT GetBuffer(
272         [in] UINT buffer_idx,
273         [in] REFIID riid,
274         [in, out] void **surface
275     );
276     HRESULT SetFullscreenState(
277         [in] BOOL fullscreen,
278         [in] IDXGIOutput *target
279     );
280     HRESULT GetFullscreenState(
281         [out] BOOL *fullscreen,
282         [out] IDXGIOutput **target
283     );
284     HRESULT GetDesc(
285         [out] DXGI_SWAP_CHAIN_DESC *desc
286     );
287     HRESULT ResizeBuffers(
288         [in] UINT buffer_count,
289         [in] UINT width,
290         [in] UINT height,
291         [in] DXGI_FORMAT format,
292         [in] UINT flags
293     );
294     HRESULT ResizeTarget(
295         [in] const DXGI_MODE_DESC *target_mode_desc
296     );
297     HRESULT GetContainingOutput(
298         [out] IDXGIOutput **output
299     );
300     HRESULT GetFrameStatistics(
301         [out] DXGI_FRAME_STATISTICS *stats
302     );
303     HRESULT GetLastPresentCount(
304         [out] UINT *last_present_count
305     );
306 }
307
308 [
309     object,
310     local,
311     uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369)
312 ]
313 interface IDXGIFactory : IDXGIObject
314 {
315     HRESULT EnumAdapters(
316         [in] UINT adapter_idx,
317         [out] IDXGIAdapter **adapter
318     );
319     HRESULT MakeWindowAssociation(
320         [in] HWND window,
321         [in] UINT flags
322     );
323     HRESULT GetWindowAssociation(
324         [in] HWND *window
325     );
326     HRESULT CreateSwapChain(
327         [in] IUnknown *device,
328         [in] DXGI_SWAP_CHAIN_DESC *desc,
329         [out] IDXGISwapChain **swapchain
330     );
331     HRESULT CreateSoftwareAdapter(
332         [in] HMODULE swrast,
333         [out] IDXGIAdapter **adapter
334     );
335 }
336
337 [local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory);
338
339 [
340     object,
341     local,
342     uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c)
343 ]
344 interface IDXGIDevice : IDXGIObject
345 {
346     HRESULT GetAdapter(
347         [out] IDXGIAdapter **adapter
348     );
349     HRESULT CreateSurface(
350         [in] const DXGI_SURFACE_DESC *desc,
351         [in] UINT surface_count,
352         [in] DXGI_USAGE usage,
353         [in] const DXGI_SHARED_RESOURCE *shared_resource,
354         [out] IDXGISurface **surface
355     );
356     HRESULT QueryResourceResidency(
357         [in] IUnknown *const *resources,
358         [out] DXGI_RESIDENCY *residency,
359         [in] UINT resource_count
360     );
361     HRESULT SetGPUThreadPriority(
362         [in] INT priority
363     );
364     HRESULT GetGPUThreadPriority(
365         [out] INT *priority
366     );
367 }