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
19import "dxgi.idl";
20
21typedef enum _DXGI_OFFER_RESOURCE_PRIORITY {
22    DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1,
23    DXGI_OFFER_RESOURCE_PRIORITY_NORMAL,
24    DXGI_OFFER_RESOURCE_PRIORITY_HIGH
25} DXGI_OFFER_RESOURCE_PRIORITY;
26
27typedef enum DXGI_ALPHA_MODE {
28    DXGI_ALPHA_MODE_UNSPECIFIED = 0,
29    DXGI_ALPHA_MODE_PREMULTIPLIED = 1,
30    DXGI_ALPHA_MODE_STRAIGHT = 2,
31    DXGI_ALPHA_MODE_IGNORE = 3,
32    DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff
33} DXGI_ALPHA_MODE;
34
35[
36    object,
37    uuid(05008617-fbfd-4051-a790-144884b4f6a9),
38    local,
39    pointer_default(unique)
40]
41interface IDXGIDevice2 : IDXGIDevice1
42{
43    HRESULT OfferResources(
44            [in] UINT NumResources,
45            [in, size_is(NumResources)] IDXGIResource *const *ppResources,
46            [in] DXGI_OFFER_RESOURCE_PRIORITY Priority);
47
48    HRESULT ReclaimResources(
49            [in] UINT NumResources,
50            [in, size_is(NumResources)] IDXGIResource *const *ppResources,
51            [out, size_is(NumResources)] BOOL *pDiscarded);
52
53    HRESULT EnqueueSetEvent(
54            [in] HANDLE hEvent);
55}
56
57typedef enum DXGI_SCALING {
58    DXGI_SCALING_STRETCH = 0,
59    DXGI_SCALING_NONE = 1
60} DXGI_SCALING;
61
62typedef struct DXGI_SWAP_CHAIN_DESC1 {
63    UINT Width;
64    UINT Height;
65    DXGI_FORMAT Format;
66    BOOL Stereo;
67    DXGI_SAMPLE_DESC SampleDesc;
68    DXGI_USAGE BufferUsage;
69    UINT BufferCount;
70    DXGI_SCALING Scaling;
71    DXGI_SWAP_EFFECT SwapEffect;
72    DXGI_ALPHA_MODE AlphaMode;
73    UINT Flags;
74} DXGI_SWAP_CHAIN_DESC1;
75
76typedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC {
77    DXGI_RATIONAL RefreshRate;
78    DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
79    DXGI_MODE_SCALING Scaling;
80    BOOL Windowed;
81} DXGI_SWAP_CHAIN_FULLSCREEN_DESC;
82
83typedef struct DXGI_PRESENT_PARAMETERS {
84    UINT DirtyRectsCount;
85    RECT *pDirtyRects;
86    RECT *pScrollRect;
87    POINT *pScrollOffset;
88} DXGI_PRESENT_PARAMETERS;
89
90[
91    object,
92    uuid(790a45f7-0d42-4876-983a-0a55cfe6f4aa),
93    local,
94    pointer_default(unique)
95]
96interface IDXGISwapChain1 : IDXGISwapChain
97{
98    HRESULT GetDesc1(
99            [out] DXGI_SWAP_CHAIN_DESC1 *pDesc);
100
101    HRESULT GetFullscreenDesc(
102            [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc);
103
104    HRESULT GetHwnd(
105            [out] HWND *pHwnd);
106
107    HRESULT GetCoreWindow(
108            [in] REFIID refiid,
109            [out] void **ppUnk);
110
111    HRESULT Present1(
112            [in] UINT SyncInterval,
113            [in] UINT PresentFlags,
114            [in] const DXGI_PRESENT_PARAMETERS *pPresentParameters);
115
116    BOOL IsTemporaryMonoSupported();
117
118    HRESULT GetRestrictToOutput(
119            [out] IDXGIOutput **ppRestrictToOutput);
120
121    HRESULT SetBackgroundColor(
122            [in] const DXGI_RGBA *pColor);
123
124    HRESULT GetBackgroundColor(
125            [out] DXGI_RGBA *pColor);
126
127    HRESULT SetRotation(
128            [in] DXGI_MODE_ROTATION Rotation);
129
130    HRESULT GetRotation(
131            [out] DXGI_MODE_ROTATION *pRotation);
132}
133
134[
135    object,
136    uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0),
137    local,
138    pointer_default(unique)
139]
140interface IDXGIFactory2 : IDXGIFactory1
141{
142    BOOL IsWindowedStereoEnabled();
143
144    HRESULT CreateSwapChainForHwnd(
145            [in]  IUnknown *pDevice,
146            [in]  HWND hWnd,
147            [in]  const DXGI_SWAP_CHAIN_DESC1 *pDesc,
148            [in]  const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc,
149            [in]  IDXGIOutput *pRestrictToOutput,
150            [out] IDXGISwapChain1 **ppSwapChain);
151
152    HRESULT CreateSwapChainForCoreWindow(
153            [in]  IUnknown *pDevice,
154            [in]  IUnknown *pWindow,
155            [in]  const DXGI_SWAP_CHAIN_DESC1 *pDesc,
156            [in]  IDXGIOutput *pRestrictToOutput,
157            [out] IDXGISwapChain1 **ppSwapChain);
158
159    HRESULT GetSharedResourceAdapterLuid(
160            [in]  HANDLE hResource,
161            [out] LUID *pLuid);
162
163    HRESULT RegisterOcclusionStatusWindow(
164            [in]  HWND WindowHandle,
165            [in]  UINT wMsg,
166            [out] DWORD *pdwCookie);
167
168    HRESULT RegisterStereoStatusEvent(
169            [in]  HANDLE hEvent,
170            [out] DWORD *pdwCookie);
171
172    void UnregisterStereoStatus(
173            [in]  DWORD dwCookie);
174
175    HRESULT RegisterStereoStatusWindow(
176            [in]  HWND WindowHandle,
177            [in]  UINT wMsg,
178            [out] DWORD *pdwCookie);
179
180    HRESULT RegisterOcclusionStatusEvent(
181            [in]  HANDLE hEvent,
182            [out] DWORD *pdwCookie);
183
184    void UnregisterOcclusionStatus(
185            [in]  DWORD dwCookie);
186
187    HRESULT CreateSwapChainForComposition(
188            [in]  IUnknown *pDevice,
189            [in]  const DXGI_SWAP_CHAIN_DESC1 *pDesc,
190            [in]  IDXGIOutput *pRestrictToOutput,
191            [out] IDXGISwapChain1 **ppSwapChain);
192}
193
194typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
195    DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY,
196    DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY,
197    DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY,
198    DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY,
199    DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY
200} DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
201
202typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
203    DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY,
204    DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY,
205    DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY,
206    DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY,
207    DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY
208} DXGI_COMPUTE_PREEMPTION_GRANULARITY;
209
210typedef struct DXGI_ADAPTER_DESC2 {
211    WCHAR Description[128];
212    UINT VendorId;
213    UINT DeviceId;
214    UINT SubSysId;
215    UINT Revision;
216    SIZE_T DedicatedVideoMemory;
217    SIZE_T DedicatedSystemMemory;
218    SIZE_T SharedSystemMemory;
219    LUID AdapterLuid;
220    UINT Flags;
221    DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
222    DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;
223} DXGI_ADAPTER_DESC2;
224
225[
226    object,
227    uuid(0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5),
228    local,
229    pointer_default(unique)
230]
231interface IDXGIAdapter2 : IDXGIAdapter1
232{
233    HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc);
234}
235