blob: d2d6583f66e22e23a1567ef6733e6dbd078cb7a6 [file] [log] [blame]
José Fonsecaaf7d2312011-07-07 10:16:57 +01001##########################################################################
2#
José Fonseca51a7bde2014-09-03 22:26:21 +01003# Copyright 2014 VMware, Inc
José Fonsecaaf7d2312011-07-07 10:16:57 +01004# Copyright 2011 Jose Fonseca
5# All Rights Reserved.
6#
7# Permission is hereby granted, free of charge, to any person obtaining a copy
8# of this software and associated documentation files (the "Software"), to deal
9# in the Software without restriction, including without limitation the rights
10# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11# copies of the Software, and to permit persons to whom the Software is
12# furnished to do so, subject to the following conditions:
13#
14# The above copyright notice and this permission notice shall be included in
15# all copies or substantial portions of the Software.
16#
17# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23# THE SOFTWARE.
24#
25##########################################################################/
26
José Fonsecaca55d162012-04-16 13:05:47 +010027
Jose Fonseca06127f62015-03-14 10:53:52 +000028from winapi import *
29
30
31DXGI_FORMAT = Enum("DXGI_FORMAT", [
32 "DXGI_FORMAT_UNKNOWN",
33 "DXGI_FORMAT_R32G32B32A32_TYPELESS",
34 "DXGI_FORMAT_R32G32B32A32_FLOAT",
35 "DXGI_FORMAT_R32G32B32A32_UINT",
36 "DXGI_FORMAT_R32G32B32A32_SINT",
37 "DXGI_FORMAT_R32G32B32_TYPELESS",
38 "DXGI_FORMAT_R32G32B32_FLOAT",
39 "DXGI_FORMAT_R32G32B32_UINT",
40 "DXGI_FORMAT_R32G32B32_SINT",
41 "DXGI_FORMAT_R16G16B16A16_TYPELESS",
42 "DXGI_FORMAT_R16G16B16A16_FLOAT",
43 "DXGI_FORMAT_R16G16B16A16_UNORM",
44 "DXGI_FORMAT_R16G16B16A16_UINT",
45 "DXGI_FORMAT_R16G16B16A16_SNORM",
46 "DXGI_FORMAT_R16G16B16A16_SINT",
47 "DXGI_FORMAT_R32G32_TYPELESS",
48 "DXGI_FORMAT_R32G32_FLOAT",
49 "DXGI_FORMAT_R32G32_UINT",
50 "DXGI_FORMAT_R32G32_SINT",
51 "DXGI_FORMAT_R32G8X24_TYPELESS",
52 "DXGI_FORMAT_D32_FLOAT_S8X24_UINT",
53 "DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",
54 "DXGI_FORMAT_X32_TYPELESS_G8X24_UINT",
55 "DXGI_FORMAT_R10G10B10A2_TYPELESS",
56 "DXGI_FORMAT_R10G10B10A2_UNORM",
57 "DXGI_FORMAT_R10G10B10A2_UINT",
58 "DXGI_FORMAT_R11G11B10_FLOAT",
59 "DXGI_FORMAT_R8G8B8A8_TYPELESS",
60 "DXGI_FORMAT_R8G8B8A8_UNORM",
61 "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
62 "DXGI_FORMAT_R8G8B8A8_UINT",
63 "DXGI_FORMAT_R8G8B8A8_SNORM",
64 "DXGI_FORMAT_R8G8B8A8_SINT",
65 "DXGI_FORMAT_R16G16_TYPELESS",
66 "DXGI_FORMAT_R16G16_FLOAT",
67 "DXGI_FORMAT_R16G16_UNORM",
68 "DXGI_FORMAT_R16G16_UINT",
69 "DXGI_FORMAT_R16G16_SNORM",
70 "DXGI_FORMAT_R16G16_SINT",
71 "DXGI_FORMAT_R32_TYPELESS",
72 "DXGI_FORMAT_D32_FLOAT",
73 "DXGI_FORMAT_R32_FLOAT",
74 "DXGI_FORMAT_R32_UINT",
75 "DXGI_FORMAT_R32_SINT",
76 "DXGI_FORMAT_R24G8_TYPELESS",
77 "DXGI_FORMAT_D24_UNORM_S8_UINT",
78 "DXGI_FORMAT_R24_UNORM_X8_TYPELESS",
79 "DXGI_FORMAT_X24_TYPELESS_G8_UINT",
80 "DXGI_FORMAT_R8G8_TYPELESS",
81 "DXGI_FORMAT_R8G8_UNORM",
82 "DXGI_FORMAT_R8G8_UINT",
83 "DXGI_FORMAT_R8G8_SNORM",
84 "DXGI_FORMAT_R8G8_SINT",
85 "DXGI_FORMAT_R16_TYPELESS",
86 "DXGI_FORMAT_R16_FLOAT",
87 "DXGI_FORMAT_D16_UNORM",
88 "DXGI_FORMAT_R16_UNORM",
89 "DXGI_FORMAT_R16_UINT",
90 "DXGI_FORMAT_R16_SNORM",
91 "DXGI_FORMAT_R16_SINT",
92 "DXGI_FORMAT_R8_TYPELESS",
93 "DXGI_FORMAT_R8_UNORM",
94 "DXGI_FORMAT_R8_UINT",
95 "DXGI_FORMAT_R8_SNORM",
96 "DXGI_FORMAT_R8_SINT",
97 "DXGI_FORMAT_A8_UNORM",
98 "DXGI_FORMAT_R1_UNORM",
99 "DXGI_FORMAT_R9G9B9E5_SHAREDEXP",
100 "DXGI_FORMAT_R8G8_B8G8_UNORM",
101 "DXGI_FORMAT_G8R8_G8B8_UNORM",
102 "DXGI_FORMAT_BC1_TYPELESS",
103 "DXGI_FORMAT_BC1_UNORM",
104 "DXGI_FORMAT_BC1_UNORM_SRGB",
105 "DXGI_FORMAT_BC2_TYPELESS",
106 "DXGI_FORMAT_BC2_UNORM",
107 "DXGI_FORMAT_BC2_UNORM_SRGB",
108 "DXGI_FORMAT_BC3_TYPELESS",
109 "DXGI_FORMAT_BC3_UNORM",
110 "DXGI_FORMAT_BC3_UNORM_SRGB",
111 "DXGI_FORMAT_BC4_TYPELESS",
112 "DXGI_FORMAT_BC4_UNORM",
113 "DXGI_FORMAT_BC4_SNORM",
114 "DXGI_FORMAT_BC5_TYPELESS",
115 "DXGI_FORMAT_BC5_UNORM",
116 "DXGI_FORMAT_BC5_SNORM",
117 "DXGI_FORMAT_B5G6R5_UNORM",
118 "DXGI_FORMAT_B5G5R5A1_UNORM",
119 "DXGI_FORMAT_B8G8R8A8_UNORM",
120 "DXGI_FORMAT_B8G8R8X8_UNORM",
121 "DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM",
122 "DXGI_FORMAT_B8G8R8A8_TYPELESS",
123 "DXGI_FORMAT_B8G8R8A8_UNORM_SRGB",
124 "DXGI_FORMAT_B8G8R8X8_TYPELESS",
125 "DXGI_FORMAT_B8G8R8X8_UNORM_SRGB",
126 "DXGI_FORMAT_BC6H_TYPELESS",
127 "DXGI_FORMAT_BC6H_UF16",
128 "DXGI_FORMAT_BC6H_SF16",
129 "DXGI_FORMAT_BC7_TYPELESS",
130 "DXGI_FORMAT_BC7_UNORM",
131 "DXGI_FORMAT_BC7_UNORM_SRGB",
Jose Fonseca6bb1bf32015-07-17 11:55:23 +0100132 "DXGI_FORMAT_AYUV",
133 "DXGI_FORMAT_Y410",
134 "DXGI_FORMAT_Y416",
135 "DXGI_FORMAT_NV12",
136 "DXGI_FORMAT_P010",
137 "DXGI_FORMAT_P016",
138 "DXGI_FORMAT_420_OPAQUE",
139 "DXGI_FORMAT_YUY2",
140 "DXGI_FORMAT_Y210",
141 "DXGI_FORMAT_Y216",
142 "DXGI_FORMAT_NV11",
143 "DXGI_FORMAT_AI44",
144 "DXGI_FORMAT_IA44",
145 "DXGI_FORMAT_P8",
146 "DXGI_FORMAT_A8P8",
147 "DXGI_FORMAT_B4G4R4A4_UNORM",
Jose Fonseca06127f62015-03-14 10:53:52 +0000148])
149
150
151HRESULT = MAKE_HRESULT([
152 "DXGI_STATUS_OCCLUDED",
153 "DXGI_STATUS_CLIPPED",
154 "DXGI_STATUS_NO_REDIRECTION",
155 "DXGI_STATUS_NO_DESKTOP_ACCESS",
156 "DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE",
157 "DXGI_STATUS_MODE_CHANGED",
158 "DXGI_STATUS_MODE_CHANGE_IN_PROGRESS",
159 "DXGI_ERROR_INVALID_CALL",
160 "DXGI_ERROR_NOT_FOUND",
161 "DXGI_ERROR_MORE_DATA",
162 "DXGI_ERROR_UNSUPPORTED",
163 "DXGI_ERROR_DEVICE_REMOVED",
164 "DXGI_ERROR_DEVICE_HUNG",
165 "DXGI_ERROR_DEVICE_RESET",
166 "DXGI_ERROR_WAS_STILL_DRAWING",
167 "DXGI_ERROR_FRAME_STATISTICS_DISJOINT",
168 "DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE",
169 "DXGI_ERROR_DRIVER_INTERNAL_ERROR",
170 "DXGI_ERROR_NONEXCLUSIVE",
171 "DXGI_ERROR_NOT_CURRENTLY_AVAILABLE",
172 "DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED",
173 "DXGI_ERROR_REMOTE_OUTOFMEMORY",
174])
175
176
177DXGI_RGB = Struct("DXGI_RGB", [
178 (Float, "Red"),
179 (Float, "Green"),
180 (Float, "Blue"),
181])
182
183DXGI_GAMMA_CONTROL = Struct("DXGI_GAMMA_CONTROL", [
184 (DXGI_RGB, "Scale"),
185 (DXGI_RGB, "Offset"),
186 (Array(DXGI_RGB, 1025), "GammaCurve"),
187])
188
189DXGI_GAMMA_CONTROL_CAPABILITIES = Struct("DXGI_GAMMA_CONTROL_CAPABILITIES", [
190 (BOOL, "ScaleAndOffsetSupported"),
191 (Float, "MaxConvertedValue"),
192 (Float, "MinConvertedValue"),
193 (UINT, "NumGammaControlPoints"),
194 (Array(Float, "{self}.NumGammaControlPoints"), "ControlPointPositions"),
195])
196
197DXGI_RATIONAL = Struct("DXGI_RATIONAL", [
198 (UINT, "Numerator"),
199 (UINT, "Denominator"),
200])
201
202DXGI_MODE_SCANLINE_ORDER = Enum("DXGI_MODE_SCANLINE_ORDER", [
203 "DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED",
204 "DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE",
205 "DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST",
206 "DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST",
207])
208
209DXGI_MODE_SCALING = Enum("DXGI_MODE_SCALING", [
210 "DXGI_MODE_SCALING_UNSPECIFIED",
211 "DXGI_MODE_SCALING_CENTERED",
212 "DXGI_MODE_SCALING_STRETCHED",
213])
214
215DXGI_MODE_ROTATION = Enum("DXGI_MODE_ROTATION", [
216 "DXGI_MODE_ROTATION_UNSPECIFIED",
217 "DXGI_MODE_ROTATION_IDENTITY",
218 "DXGI_MODE_ROTATION_ROTATE90",
219 "DXGI_MODE_ROTATION_ROTATE180",
220 "DXGI_MODE_ROTATION_ROTATE270",
221])
222
223DXGI_MODE_DESC = Struct("DXGI_MODE_DESC", [
224 (UINT, "Width"),
225 (UINT, "Height"),
226 (DXGI_RATIONAL, "RefreshRate"),
227 (DXGI_FORMAT, "Format"),
228 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
229 (DXGI_MODE_SCALING, "Scaling"),
230])
231
232DXGI_SAMPLE_DESC = Struct("DXGI_SAMPLE_DESC", [
233 (UINT, "Count"),
234 (UINT, "Quality"),
235])
236
237DXGI_RGBA = Struct("DXGI_RGBA", [
238 (Float, "r"),
239 (Float, "g"),
240 (Float, "b"),
241 (Float, "a"),
242])
José Fonsecaaf7d2312011-07-07 10:16:57 +0100243
José Fonsecaca55d162012-04-16 13:05:47 +0100244
245IDXGIObject = Interface("IDXGIObject", IUnknown)
246IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject)
247IDXGIResource = Interface("IDXGIResource", IDXGIDeviceSubObject)
248IDXGIKeyedMutex = Interface("IDXGIKeyedMutex", IDXGIDeviceSubObject)
249IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject)
250IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface)
251IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
252IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
253IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
254IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
255IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
256IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory)
257IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter)
258IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice)
259
260
261DXGI_USAGE = Flags(UINT, [
José Fonseca467a42a2012-05-04 11:49:19 +0100262 "DXGI_CPU_ACCESS_NONE", # 0
263 "DXGI_CPU_ACCESS_SCRATCH", # 3
264 "DXGI_CPU_ACCESS_DYNAMIC", # 1
265 "DXGI_CPU_ACCESS_READ_WRITE", # 2
José Fonsecaca55d162012-04-16 13:05:47 +0100266 "DXGI_USAGE_SHADER_INPUT",
267 "DXGI_USAGE_RENDER_TARGET_OUTPUT",
268 "DXGI_USAGE_BACK_BUFFER",
269 "DXGI_USAGE_SHARED",
270 "DXGI_USAGE_READ_ONLY",
271 "DXGI_USAGE_DISCARD_ON_PRESENT",
272 "DXGI_USAGE_UNORDERED_ACCESS",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100273])
274
José Fonsecaca55d162012-04-16 13:05:47 +0100275DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [
276 (UINT, "PresentCount"),
277 (UINT, "PresentRefreshCount"),
278 (UINT, "SyncRefreshCount"),
279 (LARGE_INTEGER, "SyncQPCTime"),
280 (LARGE_INTEGER, "SyncGPUTime"),
281])
282
283DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [
284 (INT, "Pitch"),
José Fonsecafc047bb2013-05-29 19:28:03 +0100285 (LinearPointer(BYTE, "_MappedSize"), "pBits"),
José Fonsecaca55d162012-04-16 13:05:47 +0100286])
287
288DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [
289 (WString, "Description"),
290 (UINT, "VendorId"),
291 (UINT, "DeviceId"),
292 (UINT, "SubSysId"),
293 (UINT, "Revision"),
294 (SIZE_T, "DedicatedVideoMemory"),
295 (SIZE_T, "DedicatedSystemMemory"),
296 (SIZE_T, "SharedSystemMemory"),
297 (LUID, "AdapterLuid"),
298])
299
300DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [
301 (WString, "DeviceName"),
302 (RECT, "DesktopCoordinates"),
303 (BOOL, "AttachedToDesktop"),
304 (DXGI_MODE_ROTATION, "Rotation"),
305 (HMONITOR, "Monitor"),
306])
307
308DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [
309 (HANDLE, "Handle"),
310])
311
312DXGI_RESOURCE_PRIORITY = FakeEnum(UINT, [
313 "DXGI_RESOURCE_PRIORITY_MINIMUM",
314 "DXGI_RESOURCE_PRIORITY_LOW",
315 "DXGI_RESOURCE_PRIORITY_NORMAL",
316 "DXGI_RESOURCE_PRIORITY_HIGH",
317 "DXGI_RESOURCE_PRIORITY_MAXIMUM",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100318])
319
320DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [
321 "DXGI_RESIDENCY_FULLY_RESIDENT",
322 "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY",
323 "DXGI_RESIDENCY_EVICTED_TO_DISK",
324])
325
326DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [
327 (UINT, "Width"),
328 (UINT, "Height"),
329 (DXGI_FORMAT, "Format"),
330 (DXGI_SAMPLE_DESC, "SampleDesc"),
331])
332
José Fonsecaca55d162012-04-16 13:05:47 +0100333DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [
334 "DXGI_SWAP_EFFECT_DISCARD",
335 "DXGI_SWAP_EFFECT_SEQUENTIAL",
Jose Fonseca6bb1bf32015-07-17 11:55:23 +0100336 "DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100337])
338
José Fonsecaca55d162012-04-16 13:05:47 +0100339DXGI_SWAP_CHAIN_FLAG = Flags(UINT, [
José Fonsecaaf7d2312011-07-07 10:16:57 +0100340 "DXGI_SWAP_CHAIN_FLAG_NONPREROTATED",
341 "DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH",
342 "DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE",
Jose Fonseca6bb1bf32015-07-17 11:55:23 +0100343 "DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT",
344 "DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER",
345 "DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY",
346 "DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT",
347 "DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER",
348 "DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO",
349 "DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100350])
351
352DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [
353 (DXGI_MODE_DESC, "BufferDesc"),
354 (DXGI_SAMPLE_DESC, "SampleDesc"),
355 (DXGI_USAGE, "BufferUsage"),
356 (UINT, "BufferCount"),
357 (HWND, "OutputWindow"),
358 (BOOL, "Windowed"),
359 (DXGI_SWAP_EFFECT, "SwapEffect"),
José Fonsecaca55d162012-04-16 13:05:47 +0100360 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
361])
362
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500363
José Fonsecaca55d162012-04-16 13:05:47 +0100364IDXGIObject.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100365 StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False),
366 StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False),
José Fonseca9eec9342014-10-03 22:24:50 +0100367 StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100368 StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]),
369]
370
371IDXGIDeviceSubObject.methods += [
372 StdMethod(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppDevice")]),
373]
374
375IDXGIResource.methods += [
376 StdMethod(HRESULT, "GetSharedHandle", [Out(Pointer(HANDLE), "pSharedHandle")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100377 StdMethod(HRESULT, "GetUsage", [Out(Pointer(DXGI_USAGE), "pUsage")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100378 StdMethod(HRESULT, "SetEvictionPriority", [(DXGI_RESOURCE_PRIORITY, "EvictionPriority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100379 StdMethod(HRESULT, "GetEvictionPriority", [Out(Pointer(DXGI_RESOURCE_PRIORITY), "pEvictionPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100380]
381
382IDXGIKeyedMutex.methods += [
Jose Fonseca65b67892015-07-16 16:59:30 +0100383 StdMethod(HRESULT, "AcquireSync", [(UINT64, "Key"), (DWORD, "dwMilliseconds")], sideeffects=False),
384 StdMethod(HRESULT, "ReleaseSync", [(UINT64, "Key")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100385]
386
387DXGI_MAP = Flags(UINT, [
388 "DXGI_MAP_READ",
389 "DXGI_MAP_WRITE",
390 "DXGI_MAP_DISCARD",
391])
392
393IDXGISurface.methods += [
José Fonseca3f174372012-05-08 12:09:42 +0100394 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "pDesc")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100395 StdMethod(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect"), (DXGI_MAP, "MapFlags")]),
396 StdMethod(HRESULT, "Unmap", []),
397]
398
399IDXGISurface1.methods += [
400 StdMethod(HRESULT, "GetDC", [(BOOL, "Discard"), Out(Pointer(HDC), "phdc")]),
401 StdMethod(HRESULT, "ReleaseDC", [(Pointer(RECT), "pDirtyRect")]),
402]
403
404IDXGIAdapter.methods += [
405 StdMethod(HRESULT, "EnumOutputs", [(UINT, "Output"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100406 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "pDesc")], sideeffects=False),
407 StdMethod(HRESULT, "CheckInterfaceSupport", [(REFGUID, "InterfaceName"), Out(Pointer(LARGE_INTEGER), "pUMDVersion")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100408]
409
410DXGI_ENUM_MODES = Flags(UINT, [
411 "DXGI_ENUM_MODES_INTERLACED",
412 "DXGI_ENUM_MODES_SCALING",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100413 "DXGI_ENUM_MODES_STEREO",
414 "DXGI_ENUM_MODES_DISABLED_STEREO",
José Fonsecaca55d162012-04-16 13:05:47 +0100415])
416
417IDXGIOutput.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100418 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "pDesc")], sideeffects=False),
José Fonseca7f1403c2014-10-03 22:16:19 +0100419 StdMethod(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC, "*pNumModes"), "pDesc")], sideeffects=False),
420 StdMethod(HRESULT, "FindClosestMatchingMode", [(Pointer(Const(DXGI_MODE_DESC)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100421 StdMethod(HRESULT, "WaitForVBlank", []),
422 StdMethod(HRESULT, "TakeOwnership", [(ObjPointer(IUnknown), "pDevice"), (BOOL, "Exclusive")]),
423 StdMethod(Void, "ReleaseOwnership", []),
José Fonseca28829ec2014-08-19 20:41:41 +0100424 StdMethod(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "pGammaCaps")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100425 StdMethod(HRESULT, "SetGammaControl", [(Pointer(Const(DXGI_GAMMA_CONTROL)), "pArray")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100426 StdMethod(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "pArray")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100427 StdMethod(HRESULT, "SetDisplaySurface", [(ObjPointer(IDXGISurface), "pScanoutSurface")]),
428 StdMethod(HRESULT, "GetDisplaySurfaceData", [(ObjPointer(IDXGISurface), "pDestination")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100429 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100430]
431
432DXGI_PRESENT = Flags(UINT, [
433 "DXGI_PRESENT_TEST",
434 "DXGI_PRESENT_DO_NOT_SEQUENCE",
435 "DXGI_PRESENT_RESTART",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100436 "DXGI_PRESENT_DO_NOT_WAIT",
437 "DXGI_PRESENT_STEREO_PREFER_RIGHT",
438 "DXGI_PRESENT_STEREO_TEMPORARY_MONO",
439 "DXGI_PRESENT_RESTRICT_TO_OUTPUT",
440 "DXGI_PRESENT_USE_DURATION",
José Fonsecaca55d162012-04-16 13:05:47 +0100441])
442
443IDXGISwapChain.methods += [
444 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
445 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
446 StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
447 StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100448 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
José Fonsecaf450d8b2012-11-20 14:48:31 +0000449 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
José Fonsecaca55d162012-04-16 13:05:47 +0100450 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
451 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100452 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
453 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100454]
455
456DXGI_MWA = Flags(UINT, [
457 "DXGI_MWA_NO_WINDOW_CHANGES",
458 "DXGI_MWA_NO_ALT_ENTER",
459 "DXGI_MWA_NO_PRINT_SCREEN",
460 "DXGI_MWA_VALID",
461])
462
463IDXGIFactory.methods += [
464 StdMethod(HRESULT, "EnumAdapters", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
José Fonseca0ac329d2015-02-19 20:13:44 +0000465 StdMethod(HRESULT, "MakeWindowAssociation", [(HWND, "WindowHandle"), (DXGI_MWA, "Flags")], sideeffects=False),
José Fonseca45fff9c2012-05-08 09:07:27 +0100466 StdMethod(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "pWindowHandle")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100467 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]),
468 StdMethod(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "Module"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
469]
470
471IDXGIDevice.methods += [
472 StdMethod(HRESULT, "GetAdapter", [Out(Pointer(ObjPointer(IDXGIAdapter)), "pAdapter")]),
473 StdMethod(HRESULT, "CreateSurface", [(Pointer(Const(DXGI_SURFACE_DESC)), "pDesc"), (UINT, "NumSurfaces"), (DXGI_USAGE, "Usage"), (Pointer(Const(DXGI_SHARED_RESOURCE)), "pSharedResource"), Out(Pointer(ObjPointer(IDXGISurface)), "ppSurface")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100474 StdMethod(HRESULT, "QueryResourceResidency", [(Array(Const(ObjPointer(IUnknown)), "NumResources"), "ppResources"), Out(Array(DXGI_RESIDENCY, "NumResources"), "pResidencyStatus"), (UINT, "NumResources")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100475 StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100476 StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100477]
478
José Fonsecafd9d01d2014-09-03 22:08:30 +0100479DXGI_ADAPTER_FLAG = FakeEnum(UINT, [
José Fonsecaca55d162012-04-16 13:05:47 +0100480 "DXGI_ADAPTER_FLAG_NONE",
481 "DXGI_ADAPTER_FLAG_REMOTE",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100482 "DXGI_ADAPTER_FLAG_SOFTWARE",
José Fonsecaca55d162012-04-16 13:05:47 +0100483])
484
485DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [
486 (WString, "Description"),
487 (UINT, "VendorId"),
488 (UINT, "DeviceId"),
489 (UINT, "SubSysId"),
490 (UINT, "Revision"),
491 (SIZE_T, "DedicatedVideoMemory"),
492 (SIZE_T, "DedicatedSystemMemory"),
493 (SIZE_T, "SharedSystemMemory"),
494 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100495 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100496])
497
José Fonsecaca55d162012-04-16 13:05:47 +0100498DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [
499 (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"),
500 (Array(Array(FLOAT, 16), 2), "WhitePoints"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100501])
502
José Fonsecaca55d162012-04-16 13:05:47 +0100503IDXGIFactory1.methods += [
504 StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]),
505 StdMethod(BOOL, "IsCurrent", []),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100506]
507
José Fonsecaca55d162012-04-16 13:05:47 +0100508IDXGIAdapter1.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100509 StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100510]
511
José Fonsecaca55d162012-04-16 13:05:47 +0100512IDXGIDevice1.methods += [
513 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100514 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100515]
516
José Fonsecaf450d8b2012-11-20 14:48:31 +0000517
518IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown)
519IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject)
520
521IDXGIFactoryDWM.methods += [
522 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]),
523]
524
José Fonsecab2f773d2014-02-28 14:46:23 +0000525# http://shchetinin.blogspot.co.uk/2012/04/dwm-graphics-directx-win8win7.html
José Fonsecaf450d8b2012-11-20 14:48:31 +0000526IDXGISwapChainDWM.methods += [
527 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
528 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
529 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
530 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
531 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
532 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonsecab2f773d2014-02-28 14:46:23 +0000533 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
534 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
José Fonsecaf450d8b2012-11-20 14:48:31 +0000535]
536
José Fonsecafd9d01d2014-09-03 22:08:30 +0100537
538dxgi = Module('dxgi')
539dxgi.addInterfaces([
540 IDXGIKeyedMutex,
541 IDXGIFactory1,
542 IDXGIFactoryDWM,
543 IDXGIDevice1,
544 IDXGIAdapter1,
545 IDXGIResource,
546])
547dxgi.addFunctions([
548 StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
549 StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
550])
551
552
553
554#
555# DXGI 1.2
556#
557
558IDXGIDisplayControl = Interface("IDXGIDisplayControl", IUnknown)
559IDXGIDisplayControl.methods += [
560 StdMethod(BOOL, "IsStereoEnabled", [], sideeffects=False),
561 StdMethod(Void, "SetStereoEnabled", [(BOOL, "enabled")]),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500562]
563
José Fonsecafd9d01d2014-09-03 22:08:30 +0100564DXGI_OUTDUPL_MOVE_RECT = Struct("DXGI_OUTDUPL_MOVE_RECT", [
565 (POINT, "SourcePoint"),
566 (RECT, "DestinationRect"),
567])
568
569DXGI_OUTDUPL_DESC = Struct("DXGI_OUTDUPL_DESC", [
570 (DXGI_MODE_DESC, "ModeDesc"),
571 (DXGI_MODE_ROTATION, "Rotation"),
572 (BOOL, "DesktopImageInSystemMemory"),
573])
574
575DXGI_OUTDUPL_POINTER_POSITION = Struct("DXGI_OUTDUPL_POINTER_POSITION", [
576 (POINT, "Position"),
577 (BOOL, "Visible"),
578])
579
580DXGI_OUTDUPL_POINTER_SHAPE_TYPE = Enum("DXGI_OUTDUPL_POINTER_SHAPE_TYPE", [
581 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME",
582 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR",
583 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR",
584])
585
586DXGI_OUTDUPL_POINTER_SHAPE_INFO = Struct("DXGI_OUTDUPL_POINTER_SHAPE_INFO", [
587 (UINT, "Type"),
588 (UINT, "Width"),
589 (UINT, "Height"),
590 (UINT, "Pitch"),
591 (POINT, "HotSpot"),
592])
593
594DXGI_OUTDUPL_FRAME_INFO = Struct("DXGI_OUTDUPL_FRAME_INFO", [
595 (LARGE_INTEGER, "LastPresentTime"),
596 (LARGE_INTEGER, "LastMouseUpdateTime"),
597 (UINT, "AccumulatedFrames"),
598 (BOOL, "RectsCoalesced"),
599 (BOOL, "ProtectedContentMaskedOut"),
600 (DXGI_OUTDUPL_POINTER_POSITION, "PointerPosition"),
601 (UINT, "TotalMetadataBufferSize"),
602 (UINT, "PointerShapeBufferSize"),
603])
604
605IDXGIOutputDuplication = Interface("IDXGIOutputDuplication", IDXGIObject)
606IDXGIOutputDuplication.methods += [
607 StdMethod(Void, "GetDesc", [Out(Pointer(DXGI_OUTDUPL_DESC), "pDesc")], sideeffects=False),
608 StdMethod(HRESULT, "AcquireNextFrame", [(UINT, "TimeoutInMilliseconds"), Out(Pointer(DXGI_OUTDUPL_FRAME_INFO), "pFrameInfo"), Out(Pointer(ObjPointer(IDXGIResource)), "ppDesktopResource")]),
609 StdMethod(HRESULT, "GetFrameDirtyRects", [(UINT, "DirtyRectsBufferSize"), Out(Array(RECT, "DirtyRectsBufferSize"), "pDirtyRectsBuffer"), Out(Pointer(UINT), "pDirtyRectsBufferSizeRequired")], sideeffects=False),
610 StdMethod(HRESULT, "GetFrameMoveRects", [(UINT, "MoveRectsBufferSize"), Out(Array(DXGI_OUTDUPL_MOVE_RECT, "MoveRectsBufferSize"), "pMoveRectBuffer"), Out(Pointer(UINT), "pMoveRectsBufferSizeRequired")], sideeffects=False),
611 StdMethod(HRESULT, "GetFramePointerShape", [(UINT, "PointerShapeBufferSize"), Out(OpaqueBlob(Void, "PointerShapeBufferSize"), "pPointerShapeBuffer"), Out(Pointer(UINT), "pPointerShapeBufferSizeRequired"), Out(Pointer(DXGI_OUTDUPL_POINTER_SHAPE_INFO), "pPointerShapeInfo")], sideeffects=False),
612 StdMethod(HRESULT, "MapDesktopSurface", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect")], sideeffects=False),
613 StdMethod(HRESULT, "UnMapDesktopSurface", [], sideeffects=False),
614 StdMethod(HRESULT, "ReleaseFrame", []),
615]
616
617DXGI_ALPHA_MODE = Enum("DXGI_ALPHA_MODE", [
618 "DXGI_ALPHA_MODE_UNSPECIFIED",
619 "DXGI_ALPHA_MODE_PREMULTIPLIED",
620 "DXGI_ALPHA_MODE_STRAIGHT",
621 "DXGI_ALPHA_MODE_IGNORE",
622])
623
624IDXGISurface2 = Interface("IDXGISurface2", IDXGISurface1)
625IDXGISurface2.methods += [
626 StdMethod(HRESULT, "GetResource", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParentResource"), Out(Pointer(UINT), "pSubresourceIndex")]),
627]
628
629DXGI_SHARED_RESOURCE_FLAG = Flags(DWORD, [
630 "DXGI_SHARED_RESOURCE_READ",
631 "DXGI_SHARED_RESOURCE_WRITE",
632])
633
634IDXGIResource1 = Interface("IDXGIResource1", IDXGIResource)
635IDXGIResource1.methods += [
636 StdMethod(HRESULT, "CreateSubresourceSurface", [(UINT, "index"), Out(Pointer(ObjPointer(IDXGISurface2)), "ppSurface")]),
637 StdMethod(HRESULT, "CreateSharedHandle", [(Pointer(Const(SECURITY_ATTRIBUTES)), "pAttributes"), (DXGI_SHARED_RESOURCE_FLAG, "dwAccess"), (LPCWSTR, "lpName"), Out(Pointer(HANDLE), "pHandle")]),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500638]
639
640DXGI_OFFER_RESOURCE_PRIORITY = Enum("DXGI_OFFER_RESOURCE_PRIORITY", [
641 "DXGI_OFFER_RESOURCE_PRIORITY_LOW",
642 "DXGI_OFFER_RESOURCE_PRIORITY_NORMAL",
643 "DXGI_OFFER_RESOURCE_PRIORITY_HIGH",
644])
645
José Fonsecafd9d01d2014-09-03 22:08:30 +0100646IDXGIDevice2 = Interface("IDXGIDevice2", IDXGIDevice1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500647IDXGIDevice2.methods += [
648 StdMethod(HRESULT, "OfferResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), (DXGI_OFFER_RESOURCE_PRIORITY, "Priority")]),
649 StdMethod(HRESULT, "ReclaimResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), Out(Pointer(BOOL), "pDiscarded")]),
650 StdMethod(HRESULT, "EnqueueSetEvent", [(HANDLE, "hEvent")]),
651]
652
José Fonsecafd9d01d2014-09-03 22:08:30 +0100653DXGI_MODE_DESC1 = Struct("DXGI_MODE_DESC1", [
654 (UINT, "Width"),
655 (UINT, "Height"),
656 (DXGI_RATIONAL, "RefreshRate"),
657 (DXGI_FORMAT, "Format"),
658 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
659 (DXGI_MODE_SCALING, "Scaling"),
660 (BOOL, "Stereo"),
661])
662
663DXGI_SCALING = Enum("DXGI_SCALING", [
664 "DXGI_SCALING_STRETCH",
665 "DXGI_SCALING_NONE",
666 "DXGI_SCALING_ASPECT_RATIO_STRETCH",
667])
668
669DXGI_SWAP_CHAIN_DESC1 = Struct("DXGI_SWAP_CHAIN_DESC1", [
670 (UINT, "Width"),
671 (UINT, "Height"),
672 (DXGI_FORMAT, "Format"),
673 (BOOL, "Stereo"),
674 (DXGI_SAMPLE_DESC, "SampleDesc"),
675 (DXGI_USAGE, "BufferUsage"),
676 (UINT, "BufferCount"),
677 (DXGI_SCALING, "Scaling"),
678 (DXGI_SWAP_EFFECT, "SwapEffect"),
679 (DXGI_ALPHA_MODE, "AlphaMode"),
680 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
681])
682
683DXGI_SWAP_CHAIN_FULLSCREEN_DESC = Struct("DXGI_SWAP_CHAIN_FULLSCREEN_DESC", [
684 (DXGI_RATIONAL, "RefreshRate"),
685 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
686 (DXGI_MODE_SCALING, "Scaling"),
687 (BOOL, "Windowed"),
688])
689
690DXGI_PRESENT_PARAMETERS = Struct("DXGI_PRESENT_PARAMETERS", [
691 (UINT, "DirtyRectsCount"),
692 (Array(RECT, "{self}.DirtyRectsCount"), "pDirtyRects"),
693 (Pointer(RECT), "pScrollRect"),
694 (Pointer(POINT), "pScrollOffset"),
695])
696
697IDXGISwapChain1 = Interface("IDXGISwapChain1", IDXGISwapChain)
698IDXGISwapChain1.methods += [
699 StdMethod(HRESULT, "GetDesc1", [(Out(Pointer(DXGI_SWAP_CHAIN_DESC1), "pDesc"))], sideeffects=False),
700 StdMethod(HRESULT, "GetFullscreenDesc", [(Out(Pointer(DXGI_SWAP_CHAIN_FULLSCREEN_DESC), "pDesc"))], sideeffects=False),
701 StdMethod(HRESULT, "GetHwnd", [(Out(Pointer(HWND), "pHwnd"))], sideeffects=False),
702 StdMethod(HRESULT, "GetCoreWindow", [(REFIID, "riid"), (Out(Pointer(ObjPointer(Void)), "ppUnk"))]),
703 StdMethod(HRESULT, "Present1", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags"), (Pointer(Const(DXGI_PRESENT_PARAMETERS)), "pPresentParameters")]),
704 StdMethod(BOOL, "IsTemporaryMonoSupported", [], sideeffects=False),
705 StdMethod(HRESULT, "GetRestrictToOutput", [(Out(Pointer(ObjPointer(IDXGIOutput)), "ppRestrictToOutput"))]),
706 StdMethod(HRESULT, "SetBackgroundColor", [(Pointer(Const(DXGI_RGBA)), "pColor")]),
707 StdMethod(HRESULT, "GetBackgroundColor", [(Out(Pointer(DXGI_RGBA), "pColor"))], sideeffects=False),
708 StdMethod(HRESULT, "SetRotation", [(DXGI_MODE_ROTATION, "Rotation")]),
709 StdMethod(HRESULT, "GetRotation", [(Out(Pointer(DXGI_MODE_ROTATION), "pRotation"))], sideeffects=False),
710]
711
712IDXGIFactory2 = Interface("IDXGIFactory2", IDXGIFactory1)
713IDXGIFactory2.methods += [
714 StdMethod(BOOL, "IsWindowedStereoEnabled", [], sideeffects=False),
715 StdMethod(HRESULT, "CreateSwapChainForHwnd", [(ObjPointer(IUnknown), "pDevice"), (HWND, "WindowHandle"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (Pointer(Const(DXGI_SWAP_CHAIN_FULLSCREEN_DESC)), "pFullscreenDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
716 StdMethod(HRESULT, "CreateSwapChainForCoreWindow", [(ObjPointer(IUnknown), "pDevice"), (ObjPointer(IUnknown), "pWindow"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
717 StdMethod(HRESULT, "GetSharedResourceAdapterLuid", [(HANDLE, "hResource"), Out(Pointer(LUID), "pLuid")], sideeffects=False),
José Fonseca40a9fe42014-09-17 19:04:55 +0100718 StdMethod(HRESULT, "RegisterStereoStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
719 StdMethod(HRESULT, "RegisterStereoStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
720 StdMethod(Void, "UnregisterStereoStatus", [(DWORD, "dwCookie")], sideeffects=False),
721 StdMethod(HRESULT, "RegisterOcclusionStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
722 StdMethod(HRESULT, "RegisterOcclusionStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
723 StdMethod(Void, "UnregisterOcclusionStatus", [(DWORD, "dwCookie")], sideeffects=False),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100724 StdMethod(HRESULT, "CreateSwapChainForComposition", [(ObjPointer(IUnknown), "pDevice"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
725]
726
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500727DXGI_GRAPHICS_PREEMPTION_GRANULARITY = Enum("DXGI_GRAPHICS_PREEMPTION_GRANULARITY", [
728 "DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY",
729 "DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY",
730 "DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY",
731 "DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY",
732 "DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY",
733])
734
735DXGI_COMPUTE_PREEMPTION_GRANULARITY = Enum("DXGI_COMPUTE_PREEMPTION_GRANULARITY", [
736 "DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY",
737 "DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY",
738 "DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY",
739 "DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY",
740 "DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY",
741])
742
743DXGI_ADAPTER_DESC2 = Struct("DXGI_ADAPTER_DESC2", [
744 (WString, "Description"),
745 (UINT, "VendorId"),
746 (UINT, "DeviceId"),
747 (UINT, "SubSysId"),
748 (UINT, "Revision"),
749 (SIZE_T, "DedicatedVideoMemory"),
750 (SIZE_T, "DedicatedSystemMemory"),
751 (SIZE_T, "SharedSystemMemory"),
752 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100753 (DXGI_ADAPTER_FLAG, "Flags"),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500754 (DXGI_GRAPHICS_PREEMPTION_GRANULARITY, "GraphicsPreemptionGranularity"),
755 (DXGI_COMPUTE_PREEMPTION_GRANULARITY, "ComputePreemptionGranularity"),
756])
757
José Fonsecafd9d01d2014-09-03 22:08:30 +0100758IDXGIAdapter2 = Interface("IDXGIAdapter2", IDXGIAdapter1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500759IDXGIAdapter2.methods += [
760 StdMethod(HRESULT, "GetDesc2", [Out(Pointer(DXGI_ADAPTER_DESC2), "pDesc")], sideeffects=False),
761]
José Fonsecaf450d8b2012-11-20 14:48:31 +0000762
José Fonsecafd9d01d2014-09-03 22:08:30 +0100763IDXGIOutput1 = Interface("IDXGIOutput1", IDXGIOutput)
764IDXGIOutput1.methods += [
José Fonseca7f1403c2014-10-03 22:16:19 +0100765 StdMethod(HRESULT, "GetDisplayModeList1", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC1, "*pNumModes"), "pDesc")], sideeffects=False),
766 StdMethod(HRESULT, "FindClosestMatchingMode1", [(Pointer(Const(DXGI_MODE_DESC1)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC1), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")], sideeffects=False),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100767 StdMethod(HRESULT, "GetDisplaySurfaceData1", [(ObjPointer(IDXGIResource), "pDestination")]),
768 StdMethod(HRESULT, "DuplicateOutput", [(ObjPointer(IUnknown), "pDevice"), Out(Pointer(ObjPointer(IDXGIOutputDuplication)), "ppOutputDuplication")]),
José Fonseca2f439632014-08-27 14:15:44 +0100769]
770
José Fonsecacdefc482012-11-16 20:06:20 +0000771dxgi.addInterfaces([
José Fonseca818d9f02014-09-14 19:41:31 +0100772 IDXGIDisplayControl,
José Fonseca2f439632014-08-27 14:15:44 +0100773 IDXGIDevice2,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100774 IDXGISwapChain1,
775 IDXGIFactory2,
José Fonseca2f439632014-08-27 14:15:44 +0100776 IDXGIResource1,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100777 IDXGIAdapter2,
778 IDXGIOutput1,
José Fonsecaca55d162012-04-16 13:05:47 +0100779])
José Fonseca51a7bde2014-09-03 22:26:21 +0100780
781#
782# DXGI 1.3
783#
784
785DXGI_CREATE_FACTORY_FLAGS = Flags(UINT, [
786 "DXGI_CREATE_FACTORY_DEBUG",
787])
788
789dxgi.addFunctions([
790 StdFunction(HRESULT, "CreateDXGIFactory2", [(DXGI_CREATE_FACTORY_FLAGS, "Flags"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
791])
792
793IDXGIDevice3 = Interface("IDXGIDevice3", IDXGIDevice2)
794IDXGIDevice3.methods += [
795 StdMethod(Void, "Trim", []),
796]
797
798DXGI_MATRIX_3X2_F = Struct("DXGI_MATRIX_3X2_F", [
799 (FLOAT, "_11"),
800 (FLOAT, "_12"),
801 (FLOAT, "_21"),
802 (FLOAT, "_22"),
803 (FLOAT, "_31"),
804 (FLOAT, "_32"),
805])
806
807IDXGISwapChain2 = Interface("IDXGISwapChain2", IDXGISwapChain1)
808IDXGISwapChain2.methods += [
809 StdMethod(HRESULT, "SetSourceSize", [(UINT, "Width"), (UINT, "Height")]),
810 StdMethod(HRESULT, "GetSourceSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
811 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
812 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
813 StdMethod(HANDLE, "GetFrameLatencyWaitableObject", [], sideeffects=False),
814 StdMethod(HRESULT, "SetMatrixTransform", [(Pointer(Const(DXGI_MATRIX_3X2_F)), "pMatrix")]),
815 StdMethod(HRESULT, "GetMatrixTransform", [Out(Pointer(DXGI_MATRIX_3X2_F), "pMatrix")], sideeffects=False),
816]
817
818IDXGIOutput2 = Interface("IDXGIOutput2", IDXGIOutput1)
819IDXGIOutput2.methods += [
820 StdMethod(BOOL, "SupportsOverlays", [], sideeffects=False),
821]
822
823IDXGIFactory3 = Interface("IDXGIFactory3", IDXGIFactory2)
824IDXGIFactory3.methods += [
825 StdMethod(DXGI_CREATE_FACTORY_FLAGS, "GetCreationFlags", [], sideeffects=False),
826]
827
828DXGI_DECODE_SWAP_CHAIN_DESC = Struct("DXGI_DECODE_SWAP_CHAIN_DESC", [
829 (UINT, "Flags"),
830])
831
832# XXX: Flags
833DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS = Enum("DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS", [
834 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE",
835 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709",
836 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC",
837])
838
839IDXGIDecodeSwapChain = Interface("IDXGIDecodeSwapChain", IUnknown)
840IDXGIDecodeSwapChain.methods += [
841 StdMethod(HRESULT, "PresentBuffer", [(UINT, "BufferToPresent"), (UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
842 StdMethod(HRESULT, "SetSourceRect", [(Pointer(Const(RECT)), "pRect")]),
843 StdMethod(HRESULT, "SetTargetRect", [(Pointer(Const(RECT)), "pRect")]),
844 StdMethod(HRESULT, "SetDestSize", [(UINT, "Width"), (UINT, "Height")]),
845 StdMethod(HRESULT, "GetSourceRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
846 StdMethod(HRESULT, "GetTargetRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
847 StdMethod(HRESULT, "GetDestSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
848 StdMethod(HRESULT, "SetColorSpace", [(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "ColorSpace")]),
849 StdMethod(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "GetColorSpace", [], sideeffects=False),
850]
851
852IDXGIFactoryMedia = Interface("IDXGIFactoryMedia", IUnknown)
853IDXGIFactoryMedia.methods += [
854 StdMethod(HRESULT, "CreateSwapChainForCompositionSurfaceHandle", [(ObjPointer(IUnknown), "pDevice"), (HANDLE, "hSurface"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
855 StdMethod(HRESULT, "CreateDecodeSwapChainForCompositionSurfaceHandle", [(ObjPointer(IUnknown), "pDevice"), (HANDLE, "hSurface"), (Pointer(DXGI_DECODE_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIResource), "pYuvDecodeBuffers"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGIDecodeSwapChain)), "ppSwapChain")]),
856]
857
858DXGI_FRAME_PRESENTATION_MODE = Enum("DXGI_FRAME_PRESENTATION_MODE", [
859 "DXGI_FRAME_PRESENTATION_MODE_COMPOSED",
860 "DXGI_FRAME_PRESENTATION_MODE_OVERLAY",
861 "DXGI_FRAME_PRESENTATION_MODE_NONE",
862])
863
864DXGI_FRAME_STATISTICS_MEDIA = Struct("DXGI_FRAME_STATISTICS_MEDIA", [
865 (UINT, "PresentCount"),
866 (UINT, "PresentRefreshCount"),
867 (UINT, "SyncRefreshCount"),
868 (LARGE_INTEGER, "SyncQPCTime"),
869 (LARGE_INTEGER, "SyncGPUTime"),
870 (DXGI_FRAME_PRESENTATION_MODE, "CompositionMode"),
871 (UINT, "ApprovedPresentDuration"),
872])
873
874IDXGISwapChainMedia = Interface("IDXGISwapChainMedia", IUnknown)
875IDXGISwapChainMedia.methods += [
876 StdMethod(HRESULT, "GetFrameStatisticsMedia", [Out(Pointer(DXGI_FRAME_STATISTICS_MEDIA), "pStats")], sideeffects=False),
877 StdMethod(HRESULT, "SetPresentDuration", [(UINT, "Duration")]),
878 StdMethod(HRESULT, "CheckPresentDurationSupport", [(UINT, "DesiredPresentDuration"), Out(Pointer(UINT), "pClosestSmallerPresentDuration"), Out(Pointer(UINT), "pClosestLargerPresentDuration")], sideeffects=False),
879]
880
881DXGI_OVERLAY_SUPPORT_FLAG = FakeEnum(UINT, [
882 "DXGI_OVERLAY_SUPPORT_FLAG_DIRECT",
883 "DXGI_OVERLAY_SUPPORT_FLAG_SCALING",
884])
885
886IDXGIOutput3 = Interface("IDXGIOutput3", IDXGIOutput2)
887IDXGIOutput3.methods += [
888 StdMethod(HRESULT, "CheckOverlaySupport", [(DXGI_FORMAT, "EnumFormat"), (ObjPointer(IUnknown), "pConcernedDevice"), Out(Pointer(DXGI_OVERLAY_SUPPORT_FLAG), "pFlags")], sideeffects=False),
889]
890
891dxgi.addInterfaces([
892 IDXGIDevice3,
893 IDXGISwapChain2,
894 IDXGISwapChainMedia,
895 IDXGIOutput3,
896 IDXGIFactory3,
897 IDXGIFactoryMedia,
898])