blob: 5848cbe4f356a49d466e850c65a9fe14f9924068 [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",
132])
133
134
135HRESULT = MAKE_HRESULT([
136 "DXGI_STATUS_OCCLUDED",
137 "DXGI_STATUS_CLIPPED",
138 "DXGI_STATUS_NO_REDIRECTION",
139 "DXGI_STATUS_NO_DESKTOP_ACCESS",
140 "DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE",
141 "DXGI_STATUS_MODE_CHANGED",
142 "DXGI_STATUS_MODE_CHANGE_IN_PROGRESS",
143 "DXGI_ERROR_INVALID_CALL",
144 "DXGI_ERROR_NOT_FOUND",
145 "DXGI_ERROR_MORE_DATA",
146 "DXGI_ERROR_UNSUPPORTED",
147 "DXGI_ERROR_DEVICE_REMOVED",
148 "DXGI_ERROR_DEVICE_HUNG",
149 "DXGI_ERROR_DEVICE_RESET",
150 "DXGI_ERROR_WAS_STILL_DRAWING",
151 "DXGI_ERROR_FRAME_STATISTICS_DISJOINT",
152 "DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE",
153 "DXGI_ERROR_DRIVER_INTERNAL_ERROR",
154 "DXGI_ERROR_NONEXCLUSIVE",
155 "DXGI_ERROR_NOT_CURRENTLY_AVAILABLE",
156 "DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED",
157 "DXGI_ERROR_REMOTE_OUTOFMEMORY",
158])
159
160
161DXGI_RGB = Struct("DXGI_RGB", [
162 (Float, "Red"),
163 (Float, "Green"),
164 (Float, "Blue"),
165])
166
167DXGI_GAMMA_CONTROL = Struct("DXGI_GAMMA_CONTROL", [
168 (DXGI_RGB, "Scale"),
169 (DXGI_RGB, "Offset"),
170 (Array(DXGI_RGB, 1025), "GammaCurve"),
171])
172
173DXGI_GAMMA_CONTROL_CAPABILITIES = Struct("DXGI_GAMMA_CONTROL_CAPABILITIES", [
174 (BOOL, "ScaleAndOffsetSupported"),
175 (Float, "MaxConvertedValue"),
176 (Float, "MinConvertedValue"),
177 (UINT, "NumGammaControlPoints"),
178 (Array(Float, "{self}.NumGammaControlPoints"), "ControlPointPositions"),
179])
180
181DXGI_RATIONAL = Struct("DXGI_RATIONAL", [
182 (UINT, "Numerator"),
183 (UINT, "Denominator"),
184])
185
186DXGI_MODE_SCANLINE_ORDER = Enum("DXGI_MODE_SCANLINE_ORDER", [
187 "DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED",
188 "DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE",
189 "DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST",
190 "DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST",
191])
192
193DXGI_MODE_SCALING = Enum("DXGI_MODE_SCALING", [
194 "DXGI_MODE_SCALING_UNSPECIFIED",
195 "DXGI_MODE_SCALING_CENTERED",
196 "DXGI_MODE_SCALING_STRETCHED",
197])
198
199DXGI_MODE_ROTATION = Enum("DXGI_MODE_ROTATION", [
200 "DXGI_MODE_ROTATION_UNSPECIFIED",
201 "DXGI_MODE_ROTATION_IDENTITY",
202 "DXGI_MODE_ROTATION_ROTATE90",
203 "DXGI_MODE_ROTATION_ROTATE180",
204 "DXGI_MODE_ROTATION_ROTATE270",
205])
206
207DXGI_MODE_DESC = Struct("DXGI_MODE_DESC", [
208 (UINT, "Width"),
209 (UINT, "Height"),
210 (DXGI_RATIONAL, "RefreshRate"),
211 (DXGI_FORMAT, "Format"),
212 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
213 (DXGI_MODE_SCALING, "Scaling"),
214])
215
216DXGI_SAMPLE_DESC = Struct("DXGI_SAMPLE_DESC", [
217 (UINT, "Count"),
218 (UINT, "Quality"),
219])
220
221DXGI_RGBA = Struct("DXGI_RGBA", [
222 (Float, "r"),
223 (Float, "g"),
224 (Float, "b"),
225 (Float, "a"),
226])
José Fonsecaaf7d2312011-07-07 10:16:57 +0100227
José Fonsecaca55d162012-04-16 13:05:47 +0100228
229IDXGIObject = Interface("IDXGIObject", IUnknown)
230IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject)
231IDXGIResource = Interface("IDXGIResource", IDXGIDeviceSubObject)
232IDXGIKeyedMutex = Interface("IDXGIKeyedMutex", IDXGIDeviceSubObject)
233IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject)
234IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface)
235IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
236IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
237IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
238IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
239IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
240IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory)
241IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter)
242IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice)
243
244
245DXGI_USAGE = Flags(UINT, [
José Fonseca467a42a2012-05-04 11:49:19 +0100246 "DXGI_CPU_ACCESS_NONE", # 0
247 "DXGI_CPU_ACCESS_SCRATCH", # 3
248 "DXGI_CPU_ACCESS_DYNAMIC", # 1
249 "DXGI_CPU_ACCESS_READ_WRITE", # 2
José Fonsecaca55d162012-04-16 13:05:47 +0100250 "DXGI_USAGE_SHADER_INPUT",
251 "DXGI_USAGE_RENDER_TARGET_OUTPUT",
252 "DXGI_USAGE_BACK_BUFFER",
253 "DXGI_USAGE_SHARED",
254 "DXGI_USAGE_READ_ONLY",
255 "DXGI_USAGE_DISCARD_ON_PRESENT",
256 "DXGI_USAGE_UNORDERED_ACCESS",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100257])
258
José Fonsecaca55d162012-04-16 13:05:47 +0100259DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [
260 (UINT, "PresentCount"),
261 (UINT, "PresentRefreshCount"),
262 (UINT, "SyncRefreshCount"),
263 (LARGE_INTEGER, "SyncQPCTime"),
264 (LARGE_INTEGER, "SyncGPUTime"),
265])
266
267DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [
268 (INT, "Pitch"),
José Fonsecafc047bb2013-05-29 19:28:03 +0100269 (LinearPointer(BYTE, "_MappedSize"), "pBits"),
José Fonsecaca55d162012-04-16 13:05:47 +0100270])
271
272DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [
273 (WString, "Description"),
274 (UINT, "VendorId"),
275 (UINT, "DeviceId"),
276 (UINT, "SubSysId"),
277 (UINT, "Revision"),
278 (SIZE_T, "DedicatedVideoMemory"),
279 (SIZE_T, "DedicatedSystemMemory"),
280 (SIZE_T, "SharedSystemMemory"),
281 (LUID, "AdapterLuid"),
282])
283
284DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [
285 (WString, "DeviceName"),
286 (RECT, "DesktopCoordinates"),
287 (BOOL, "AttachedToDesktop"),
288 (DXGI_MODE_ROTATION, "Rotation"),
289 (HMONITOR, "Monitor"),
290])
291
292DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [
293 (HANDLE, "Handle"),
294])
295
296DXGI_RESOURCE_PRIORITY = FakeEnum(UINT, [
297 "DXGI_RESOURCE_PRIORITY_MINIMUM",
298 "DXGI_RESOURCE_PRIORITY_LOW",
299 "DXGI_RESOURCE_PRIORITY_NORMAL",
300 "DXGI_RESOURCE_PRIORITY_HIGH",
301 "DXGI_RESOURCE_PRIORITY_MAXIMUM",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100302])
303
304DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [
305 "DXGI_RESIDENCY_FULLY_RESIDENT",
306 "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY",
307 "DXGI_RESIDENCY_EVICTED_TO_DISK",
308])
309
310DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [
311 (UINT, "Width"),
312 (UINT, "Height"),
313 (DXGI_FORMAT, "Format"),
314 (DXGI_SAMPLE_DESC, "SampleDesc"),
315])
316
José Fonsecaca55d162012-04-16 13:05:47 +0100317DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [
318 "DXGI_SWAP_EFFECT_DISCARD",
319 "DXGI_SWAP_EFFECT_SEQUENTIAL",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100320])
321
José Fonsecaca55d162012-04-16 13:05:47 +0100322DXGI_SWAP_CHAIN_FLAG = Flags(UINT, [
José Fonsecaaf7d2312011-07-07 10:16:57 +0100323 "DXGI_SWAP_CHAIN_FLAG_NONPREROTATED",
324 "DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH",
325 "DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE",
326])
327
328DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [
329 (DXGI_MODE_DESC, "BufferDesc"),
330 (DXGI_SAMPLE_DESC, "SampleDesc"),
331 (DXGI_USAGE, "BufferUsage"),
332 (UINT, "BufferCount"),
333 (HWND, "OutputWindow"),
334 (BOOL, "Windowed"),
335 (DXGI_SWAP_EFFECT, "SwapEffect"),
José Fonsecaca55d162012-04-16 13:05:47 +0100336 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
337])
338
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500339
José Fonsecaca55d162012-04-16 13:05:47 +0100340IDXGIObject.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100341 StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False),
342 StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False),
José Fonseca9eec9342014-10-03 22:24:50 +0100343 StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100344 StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]),
345]
346
347IDXGIDeviceSubObject.methods += [
348 StdMethod(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppDevice")]),
349]
350
351IDXGIResource.methods += [
352 StdMethod(HRESULT, "GetSharedHandle", [Out(Pointer(HANDLE), "pSharedHandle")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100353 StdMethod(HRESULT, "GetUsage", [Out(Pointer(DXGI_USAGE), "pUsage")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100354 StdMethod(HRESULT, "SetEvictionPriority", [(DXGI_RESOURCE_PRIORITY, "EvictionPriority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100355 StdMethod(HRESULT, "GetEvictionPriority", [Out(Pointer(DXGI_RESOURCE_PRIORITY), "pEvictionPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100356]
357
358IDXGIKeyedMutex.methods += [
359 StdMethod(HRESULT, "AcquireSync", [(UINT64, "Key"), (DWORD, "dwMilliseconds")]),
360 StdMethod(HRESULT, "ReleaseSync", [(UINT64, "Key")]),
361]
362
363DXGI_MAP = Flags(UINT, [
364 "DXGI_MAP_READ",
365 "DXGI_MAP_WRITE",
366 "DXGI_MAP_DISCARD",
367])
368
369IDXGISurface.methods += [
José Fonseca3f174372012-05-08 12:09:42 +0100370 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "pDesc")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100371 StdMethod(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect"), (DXGI_MAP, "MapFlags")]),
372 StdMethod(HRESULT, "Unmap", []),
373]
374
375IDXGISurface1.methods += [
376 StdMethod(HRESULT, "GetDC", [(BOOL, "Discard"), Out(Pointer(HDC), "phdc")]),
377 StdMethod(HRESULT, "ReleaseDC", [(Pointer(RECT), "pDirtyRect")]),
378]
379
380IDXGIAdapter.methods += [
381 StdMethod(HRESULT, "EnumOutputs", [(UINT, "Output"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100382 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "pDesc")], sideeffects=False),
383 StdMethod(HRESULT, "CheckInterfaceSupport", [(REFGUID, "InterfaceName"), Out(Pointer(LARGE_INTEGER), "pUMDVersion")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100384]
385
386DXGI_ENUM_MODES = Flags(UINT, [
387 "DXGI_ENUM_MODES_INTERLACED",
388 "DXGI_ENUM_MODES_SCALING",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100389 "DXGI_ENUM_MODES_STEREO",
390 "DXGI_ENUM_MODES_DISABLED_STEREO",
José Fonsecaca55d162012-04-16 13:05:47 +0100391])
392
393IDXGIOutput.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100394 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "pDesc")], sideeffects=False),
José Fonseca7f1403c2014-10-03 22:16:19 +0100395 StdMethod(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC, "*pNumModes"), "pDesc")], sideeffects=False),
396 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 +0100397 StdMethod(HRESULT, "WaitForVBlank", []),
398 StdMethod(HRESULT, "TakeOwnership", [(ObjPointer(IUnknown), "pDevice"), (BOOL, "Exclusive")]),
399 StdMethod(Void, "ReleaseOwnership", []),
José Fonseca28829ec2014-08-19 20:41:41 +0100400 StdMethod(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "pGammaCaps")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100401 StdMethod(HRESULT, "SetGammaControl", [(Pointer(Const(DXGI_GAMMA_CONTROL)), "pArray")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100402 StdMethod(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "pArray")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100403 StdMethod(HRESULT, "SetDisplaySurface", [(ObjPointer(IDXGISurface), "pScanoutSurface")]),
404 StdMethod(HRESULT, "GetDisplaySurfaceData", [(ObjPointer(IDXGISurface), "pDestination")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100405 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100406]
407
408DXGI_PRESENT = Flags(UINT, [
409 "DXGI_PRESENT_TEST",
410 "DXGI_PRESENT_DO_NOT_SEQUENCE",
411 "DXGI_PRESENT_RESTART",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100412 "DXGI_PRESENT_DO_NOT_WAIT",
413 "DXGI_PRESENT_STEREO_PREFER_RIGHT",
414 "DXGI_PRESENT_STEREO_TEMPORARY_MONO",
415 "DXGI_PRESENT_RESTRICT_TO_OUTPUT",
416 "DXGI_PRESENT_USE_DURATION",
José Fonsecaca55d162012-04-16 13:05:47 +0100417])
418
419IDXGISwapChain.methods += [
420 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
421 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
422 StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
423 StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100424 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
José Fonsecaf450d8b2012-11-20 14:48:31 +0000425 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
José Fonsecaca55d162012-04-16 13:05:47 +0100426 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
427 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100428 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
429 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100430]
431
432DXGI_MWA = Flags(UINT, [
433 "DXGI_MWA_NO_WINDOW_CHANGES",
434 "DXGI_MWA_NO_ALT_ENTER",
435 "DXGI_MWA_NO_PRINT_SCREEN",
436 "DXGI_MWA_VALID",
437])
438
439IDXGIFactory.methods += [
440 StdMethod(HRESULT, "EnumAdapters", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
José Fonseca0ac329d2015-02-19 20:13:44 +0000441 StdMethod(HRESULT, "MakeWindowAssociation", [(HWND, "WindowHandle"), (DXGI_MWA, "Flags")], sideeffects=False),
José Fonseca45fff9c2012-05-08 09:07:27 +0100442 StdMethod(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "pWindowHandle")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100443 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]),
444 StdMethod(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "Module"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
445]
446
447IDXGIDevice.methods += [
448 StdMethod(HRESULT, "GetAdapter", [Out(Pointer(ObjPointer(IDXGIAdapter)), "pAdapter")]),
449 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 +0100450 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 +0100451 StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100452 StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100453]
454
José Fonsecafd9d01d2014-09-03 22:08:30 +0100455DXGI_ADAPTER_FLAG = FakeEnum(UINT, [
José Fonsecaca55d162012-04-16 13:05:47 +0100456 "DXGI_ADAPTER_FLAG_NONE",
457 "DXGI_ADAPTER_FLAG_REMOTE",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100458 "DXGI_ADAPTER_FLAG_SOFTWARE",
José Fonsecaca55d162012-04-16 13:05:47 +0100459])
460
461DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [
462 (WString, "Description"),
463 (UINT, "VendorId"),
464 (UINT, "DeviceId"),
465 (UINT, "SubSysId"),
466 (UINT, "Revision"),
467 (SIZE_T, "DedicatedVideoMemory"),
468 (SIZE_T, "DedicatedSystemMemory"),
469 (SIZE_T, "SharedSystemMemory"),
470 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100471 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100472])
473
José Fonsecaca55d162012-04-16 13:05:47 +0100474DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [
475 (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"),
476 (Array(Array(FLOAT, 16), 2), "WhitePoints"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100477])
478
José Fonsecaca55d162012-04-16 13:05:47 +0100479IDXGIFactory1.methods += [
480 StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]),
481 StdMethod(BOOL, "IsCurrent", []),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100482]
483
José Fonsecaca55d162012-04-16 13:05:47 +0100484IDXGIAdapter1.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100485 StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100486]
487
José Fonsecaca55d162012-04-16 13:05:47 +0100488IDXGIDevice1.methods += [
489 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100490 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100491]
492
José Fonsecaf450d8b2012-11-20 14:48:31 +0000493
494IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown)
495IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject)
496
497IDXGIFactoryDWM.methods += [
498 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]),
499]
500
José Fonsecab2f773d2014-02-28 14:46:23 +0000501# http://shchetinin.blogspot.co.uk/2012/04/dwm-graphics-directx-win8win7.html
José Fonsecaf450d8b2012-11-20 14:48:31 +0000502IDXGISwapChainDWM.methods += [
503 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
504 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
505 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
506 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
507 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
508 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonsecab2f773d2014-02-28 14:46:23 +0000509 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
510 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
José Fonsecaf450d8b2012-11-20 14:48:31 +0000511]
512
José Fonsecafd9d01d2014-09-03 22:08:30 +0100513
514dxgi = Module('dxgi')
515dxgi.addInterfaces([
516 IDXGIKeyedMutex,
517 IDXGIFactory1,
518 IDXGIFactoryDWM,
519 IDXGIDevice1,
520 IDXGIAdapter1,
521 IDXGIResource,
522])
523dxgi.addFunctions([
524 StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
525 StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
526])
527
528
529
530#
531# DXGI 1.2
532#
533
534IDXGIDisplayControl = Interface("IDXGIDisplayControl", IUnknown)
535IDXGIDisplayControl.methods += [
536 StdMethod(BOOL, "IsStereoEnabled", [], sideeffects=False),
537 StdMethod(Void, "SetStereoEnabled", [(BOOL, "enabled")]),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500538]
539
José Fonsecafd9d01d2014-09-03 22:08:30 +0100540DXGI_OUTDUPL_MOVE_RECT = Struct("DXGI_OUTDUPL_MOVE_RECT", [
541 (POINT, "SourcePoint"),
542 (RECT, "DestinationRect"),
543])
544
545DXGI_OUTDUPL_DESC = Struct("DXGI_OUTDUPL_DESC", [
546 (DXGI_MODE_DESC, "ModeDesc"),
547 (DXGI_MODE_ROTATION, "Rotation"),
548 (BOOL, "DesktopImageInSystemMemory"),
549])
550
551DXGI_OUTDUPL_POINTER_POSITION = Struct("DXGI_OUTDUPL_POINTER_POSITION", [
552 (POINT, "Position"),
553 (BOOL, "Visible"),
554])
555
556DXGI_OUTDUPL_POINTER_SHAPE_TYPE = Enum("DXGI_OUTDUPL_POINTER_SHAPE_TYPE", [
557 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME",
558 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR",
559 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR",
560])
561
562DXGI_OUTDUPL_POINTER_SHAPE_INFO = Struct("DXGI_OUTDUPL_POINTER_SHAPE_INFO", [
563 (UINT, "Type"),
564 (UINT, "Width"),
565 (UINT, "Height"),
566 (UINT, "Pitch"),
567 (POINT, "HotSpot"),
568])
569
570DXGI_OUTDUPL_FRAME_INFO = Struct("DXGI_OUTDUPL_FRAME_INFO", [
571 (LARGE_INTEGER, "LastPresentTime"),
572 (LARGE_INTEGER, "LastMouseUpdateTime"),
573 (UINT, "AccumulatedFrames"),
574 (BOOL, "RectsCoalesced"),
575 (BOOL, "ProtectedContentMaskedOut"),
576 (DXGI_OUTDUPL_POINTER_POSITION, "PointerPosition"),
577 (UINT, "TotalMetadataBufferSize"),
578 (UINT, "PointerShapeBufferSize"),
579])
580
581IDXGIOutputDuplication = Interface("IDXGIOutputDuplication", IDXGIObject)
582IDXGIOutputDuplication.methods += [
583 StdMethod(Void, "GetDesc", [Out(Pointer(DXGI_OUTDUPL_DESC), "pDesc")], sideeffects=False),
584 StdMethod(HRESULT, "AcquireNextFrame", [(UINT, "TimeoutInMilliseconds"), Out(Pointer(DXGI_OUTDUPL_FRAME_INFO), "pFrameInfo"), Out(Pointer(ObjPointer(IDXGIResource)), "ppDesktopResource")]),
585 StdMethod(HRESULT, "GetFrameDirtyRects", [(UINT, "DirtyRectsBufferSize"), Out(Array(RECT, "DirtyRectsBufferSize"), "pDirtyRectsBuffer"), Out(Pointer(UINT), "pDirtyRectsBufferSizeRequired")], sideeffects=False),
586 StdMethod(HRESULT, "GetFrameMoveRects", [(UINT, "MoveRectsBufferSize"), Out(Array(DXGI_OUTDUPL_MOVE_RECT, "MoveRectsBufferSize"), "pMoveRectBuffer"), Out(Pointer(UINT), "pMoveRectsBufferSizeRequired")], sideeffects=False),
587 StdMethod(HRESULT, "GetFramePointerShape", [(UINT, "PointerShapeBufferSize"), Out(OpaqueBlob(Void, "PointerShapeBufferSize"), "pPointerShapeBuffer"), Out(Pointer(UINT), "pPointerShapeBufferSizeRequired"), Out(Pointer(DXGI_OUTDUPL_POINTER_SHAPE_INFO), "pPointerShapeInfo")], sideeffects=False),
588 StdMethod(HRESULT, "MapDesktopSurface", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect")], sideeffects=False),
589 StdMethod(HRESULT, "UnMapDesktopSurface", [], sideeffects=False),
590 StdMethod(HRESULT, "ReleaseFrame", []),
591]
592
593DXGI_ALPHA_MODE = Enum("DXGI_ALPHA_MODE", [
594 "DXGI_ALPHA_MODE_UNSPECIFIED",
595 "DXGI_ALPHA_MODE_PREMULTIPLIED",
596 "DXGI_ALPHA_MODE_STRAIGHT",
597 "DXGI_ALPHA_MODE_IGNORE",
598])
599
600IDXGISurface2 = Interface("IDXGISurface2", IDXGISurface1)
601IDXGISurface2.methods += [
602 StdMethod(HRESULT, "GetResource", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParentResource"), Out(Pointer(UINT), "pSubresourceIndex")]),
603]
604
605DXGI_SHARED_RESOURCE_FLAG = Flags(DWORD, [
606 "DXGI_SHARED_RESOURCE_READ",
607 "DXGI_SHARED_RESOURCE_WRITE",
608])
609
610IDXGIResource1 = Interface("IDXGIResource1", IDXGIResource)
611IDXGIResource1.methods += [
612 StdMethod(HRESULT, "CreateSubresourceSurface", [(UINT, "index"), Out(Pointer(ObjPointer(IDXGISurface2)), "ppSurface")]),
613 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 -0500614]
615
616DXGI_OFFER_RESOURCE_PRIORITY = Enum("DXGI_OFFER_RESOURCE_PRIORITY", [
617 "DXGI_OFFER_RESOURCE_PRIORITY_LOW",
618 "DXGI_OFFER_RESOURCE_PRIORITY_NORMAL",
619 "DXGI_OFFER_RESOURCE_PRIORITY_HIGH",
620])
621
José Fonsecafd9d01d2014-09-03 22:08:30 +0100622IDXGIDevice2 = Interface("IDXGIDevice2", IDXGIDevice1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500623IDXGIDevice2.methods += [
624 StdMethod(HRESULT, "OfferResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), (DXGI_OFFER_RESOURCE_PRIORITY, "Priority")]),
625 StdMethod(HRESULT, "ReclaimResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), Out(Pointer(BOOL), "pDiscarded")]),
626 StdMethod(HRESULT, "EnqueueSetEvent", [(HANDLE, "hEvent")]),
627]
628
José Fonsecafd9d01d2014-09-03 22:08:30 +0100629DXGI_MODE_DESC1 = Struct("DXGI_MODE_DESC1", [
630 (UINT, "Width"),
631 (UINT, "Height"),
632 (DXGI_RATIONAL, "RefreshRate"),
633 (DXGI_FORMAT, "Format"),
634 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
635 (DXGI_MODE_SCALING, "Scaling"),
636 (BOOL, "Stereo"),
637])
638
639DXGI_SCALING = Enum("DXGI_SCALING", [
640 "DXGI_SCALING_STRETCH",
641 "DXGI_SCALING_NONE",
642 "DXGI_SCALING_ASPECT_RATIO_STRETCH",
643])
644
645DXGI_SWAP_CHAIN_DESC1 = Struct("DXGI_SWAP_CHAIN_DESC1", [
646 (UINT, "Width"),
647 (UINT, "Height"),
648 (DXGI_FORMAT, "Format"),
649 (BOOL, "Stereo"),
650 (DXGI_SAMPLE_DESC, "SampleDesc"),
651 (DXGI_USAGE, "BufferUsage"),
652 (UINT, "BufferCount"),
653 (DXGI_SCALING, "Scaling"),
654 (DXGI_SWAP_EFFECT, "SwapEffect"),
655 (DXGI_ALPHA_MODE, "AlphaMode"),
656 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
657])
658
659DXGI_SWAP_CHAIN_FULLSCREEN_DESC = Struct("DXGI_SWAP_CHAIN_FULLSCREEN_DESC", [
660 (DXGI_RATIONAL, "RefreshRate"),
661 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
662 (DXGI_MODE_SCALING, "Scaling"),
663 (BOOL, "Windowed"),
664])
665
666DXGI_PRESENT_PARAMETERS = Struct("DXGI_PRESENT_PARAMETERS", [
667 (UINT, "DirtyRectsCount"),
668 (Array(RECT, "{self}.DirtyRectsCount"), "pDirtyRects"),
669 (Pointer(RECT), "pScrollRect"),
670 (Pointer(POINT), "pScrollOffset"),
671])
672
673IDXGISwapChain1 = Interface("IDXGISwapChain1", IDXGISwapChain)
674IDXGISwapChain1.methods += [
675 StdMethod(HRESULT, "GetDesc1", [(Out(Pointer(DXGI_SWAP_CHAIN_DESC1), "pDesc"))], sideeffects=False),
676 StdMethod(HRESULT, "GetFullscreenDesc", [(Out(Pointer(DXGI_SWAP_CHAIN_FULLSCREEN_DESC), "pDesc"))], sideeffects=False),
677 StdMethod(HRESULT, "GetHwnd", [(Out(Pointer(HWND), "pHwnd"))], sideeffects=False),
678 StdMethod(HRESULT, "GetCoreWindow", [(REFIID, "riid"), (Out(Pointer(ObjPointer(Void)), "ppUnk"))]),
679 StdMethod(HRESULT, "Present1", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags"), (Pointer(Const(DXGI_PRESENT_PARAMETERS)), "pPresentParameters")]),
680 StdMethod(BOOL, "IsTemporaryMonoSupported", [], sideeffects=False),
681 StdMethod(HRESULT, "GetRestrictToOutput", [(Out(Pointer(ObjPointer(IDXGIOutput)), "ppRestrictToOutput"))]),
682 StdMethod(HRESULT, "SetBackgroundColor", [(Pointer(Const(DXGI_RGBA)), "pColor")]),
683 StdMethod(HRESULT, "GetBackgroundColor", [(Out(Pointer(DXGI_RGBA), "pColor"))], sideeffects=False),
684 StdMethod(HRESULT, "SetRotation", [(DXGI_MODE_ROTATION, "Rotation")]),
685 StdMethod(HRESULT, "GetRotation", [(Out(Pointer(DXGI_MODE_ROTATION), "pRotation"))], sideeffects=False),
686]
687
688IDXGIFactory2 = Interface("IDXGIFactory2", IDXGIFactory1)
689IDXGIFactory2.methods += [
690 StdMethod(BOOL, "IsWindowedStereoEnabled", [], sideeffects=False),
691 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")]),
692 StdMethod(HRESULT, "CreateSwapChainForCoreWindow", [(ObjPointer(IUnknown), "pDevice"), (ObjPointer(IUnknown), "pWindow"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
693 StdMethod(HRESULT, "GetSharedResourceAdapterLuid", [(HANDLE, "hResource"), Out(Pointer(LUID), "pLuid")], sideeffects=False),
José Fonseca40a9fe42014-09-17 19:04:55 +0100694 StdMethod(HRESULT, "RegisterStereoStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
695 StdMethod(HRESULT, "RegisterStereoStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
696 StdMethod(Void, "UnregisterStereoStatus", [(DWORD, "dwCookie")], sideeffects=False),
697 StdMethod(HRESULT, "RegisterOcclusionStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
698 StdMethod(HRESULT, "RegisterOcclusionStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
699 StdMethod(Void, "UnregisterOcclusionStatus", [(DWORD, "dwCookie")], sideeffects=False),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100700 StdMethod(HRESULT, "CreateSwapChainForComposition", [(ObjPointer(IUnknown), "pDevice"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
701]
702
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500703DXGI_GRAPHICS_PREEMPTION_GRANULARITY = Enum("DXGI_GRAPHICS_PREEMPTION_GRANULARITY", [
704 "DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY",
705 "DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY",
706 "DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY",
707 "DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY",
708 "DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY",
709])
710
711DXGI_COMPUTE_PREEMPTION_GRANULARITY = Enum("DXGI_COMPUTE_PREEMPTION_GRANULARITY", [
712 "DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY",
713 "DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY",
714 "DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY",
715 "DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY",
716 "DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY",
717])
718
719DXGI_ADAPTER_DESC2 = Struct("DXGI_ADAPTER_DESC2", [
720 (WString, "Description"),
721 (UINT, "VendorId"),
722 (UINT, "DeviceId"),
723 (UINT, "SubSysId"),
724 (UINT, "Revision"),
725 (SIZE_T, "DedicatedVideoMemory"),
726 (SIZE_T, "DedicatedSystemMemory"),
727 (SIZE_T, "SharedSystemMemory"),
728 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100729 (DXGI_ADAPTER_FLAG, "Flags"),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500730 (DXGI_GRAPHICS_PREEMPTION_GRANULARITY, "GraphicsPreemptionGranularity"),
731 (DXGI_COMPUTE_PREEMPTION_GRANULARITY, "ComputePreemptionGranularity"),
732])
733
José Fonsecafd9d01d2014-09-03 22:08:30 +0100734IDXGIAdapter2 = Interface("IDXGIAdapter2", IDXGIAdapter1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500735IDXGIAdapter2.methods += [
736 StdMethod(HRESULT, "GetDesc2", [Out(Pointer(DXGI_ADAPTER_DESC2), "pDesc")], sideeffects=False),
737]
José Fonsecaf450d8b2012-11-20 14:48:31 +0000738
José Fonsecafd9d01d2014-09-03 22:08:30 +0100739IDXGIOutput1 = Interface("IDXGIOutput1", IDXGIOutput)
740IDXGIOutput1.methods += [
José Fonseca7f1403c2014-10-03 22:16:19 +0100741 StdMethod(HRESULT, "GetDisplayModeList1", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC1, "*pNumModes"), "pDesc")], sideeffects=False),
742 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 +0100743 StdMethod(HRESULT, "GetDisplaySurfaceData1", [(ObjPointer(IDXGIResource), "pDestination")]),
744 StdMethod(HRESULT, "DuplicateOutput", [(ObjPointer(IUnknown), "pDevice"), Out(Pointer(ObjPointer(IDXGIOutputDuplication)), "ppOutputDuplication")]),
José Fonseca2f439632014-08-27 14:15:44 +0100745]
746
José Fonsecacdefc482012-11-16 20:06:20 +0000747dxgi.addInterfaces([
José Fonseca818d9f02014-09-14 19:41:31 +0100748 IDXGIDisplayControl,
José Fonseca2f439632014-08-27 14:15:44 +0100749 IDXGIDevice2,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100750 IDXGISwapChain1,
751 IDXGIFactory2,
José Fonseca2f439632014-08-27 14:15:44 +0100752 IDXGIResource1,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100753 IDXGIAdapter2,
754 IDXGIOutput1,
José Fonsecaca55d162012-04-16 13:05:47 +0100755])
José Fonseca51a7bde2014-09-03 22:26:21 +0100756
757#
758# DXGI 1.3
759#
760
761DXGI_CREATE_FACTORY_FLAGS = Flags(UINT, [
762 "DXGI_CREATE_FACTORY_DEBUG",
763])
764
765dxgi.addFunctions([
766 StdFunction(HRESULT, "CreateDXGIFactory2", [(DXGI_CREATE_FACTORY_FLAGS, "Flags"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
767])
768
769IDXGIDevice3 = Interface("IDXGIDevice3", IDXGIDevice2)
770IDXGIDevice3.methods += [
771 StdMethod(Void, "Trim", []),
772]
773
774DXGI_MATRIX_3X2_F = Struct("DXGI_MATRIX_3X2_F", [
775 (FLOAT, "_11"),
776 (FLOAT, "_12"),
777 (FLOAT, "_21"),
778 (FLOAT, "_22"),
779 (FLOAT, "_31"),
780 (FLOAT, "_32"),
781])
782
783IDXGISwapChain2 = Interface("IDXGISwapChain2", IDXGISwapChain1)
784IDXGISwapChain2.methods += [
785 StdMethod(HRESULT, "SetSourceSize", [(UINT, "Width"), (UINT, "Height")]),
786 StdMethod(HRESULT, "GetSourceSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
787 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
788 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
789 StdMethod(HANDLE, "GetFrameLatencyWaitableObject", [], sideeffects=False),
790 StdMethod(HRESULT, "SetMatrixTransform", [(Pointer(Const(DXGI_MATRIX_3X2_F)), "pMatrix")]),
791 StdMethod(HRESULT, "GetMatrixTransform", [Out(Pointer(DXGI_MATRIX_3X2_F), "pMatrix")], sideeffects=False),
792]
793
794IDXGIOutput2 = Interface("IDXGIOutput2", IDXGIOutput1)
795IDXGIOutput2.methods += [
796 StdMethod(BOOL, "SupportsOverlays", [], sideeffects=False),
797]
798
799IDXGIFactory3 = Interface("IDXGIFactory3", IDXGIFactory2)
800IDXGIFactory3.methods += [
801 StdMethod(DXGI_CREATE_FACTORY_FLAGS, "GetCreationFlags", [], sideeffects=False),
802]
803
804DXGI_DECODE_SWAP_CHAIN_DESC = Struct("DXGI_DECODE_SWAP_CHAIN_DESC", [
805 (UINT, "Flags"),
806])
807
808# XXX: Flags
809DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS = Enum("DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS", [
810 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE",
811 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709",
812 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC",
813])
814
815IDXGIDecodeSwapChain = Interface("IDXGIDecodeSwapChain", IUnknown)
816IDXGIDecodeSwapChain.methods += [
817 StdMethod(HRESULT, "PresentBuffer", [(UINT, "BufferToPresent"), (UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
818 StdMethod(HRESULT, "SetSourceRect", [(Pointer(Const(RECT)), "pRect")]),
819 StdMethod(HRESULT, "SetTargetRect", [(Pointer(Const(RECT)), "pRect")]),
820 StdMethod(HRESULT, "SetDestSize", [(UINT, "Width"), (UINT, "Height")]),
821 StdMethod(HRESULT, "GetSourceRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
822 StdMethod(HRESULT, "GetTargetRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
823 StdMethod(HRESULT, "GetDestSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
824 StdMethod(HRESULT, "SetColorSpace", [(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "ColorSpace")]),
825 StdMethod(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "GetColorSpace", [], sideeffects=False),
826]
827
828IDXGIFactoryMedia = Interface("IDXGIFactoryMedia", IUnknown)
829IDXGIFactoryMedia.methods += [
830 StdMethod(HRESULT, "CreateSwapChainForCompositionSurfaceHandle", [(ObjPointer(IUnknown), "pDevice"), (HANDLE, "hSurface"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
831 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")]),
832]
833
834DXGI_FRAME_PRESENTATION_MODE = Enum("DXGI_FRAME_PRESENTATION_MODE", [
835 "DXGI_FRAME_PRESENTATION_MODE_COMPOSED",
836 "DXGI_FRAME_PRESENTATION_MODE_OVERLAY",
837 "DXGI_FRAME_PRESENTATION_MODE_NONE",
838])
839
840DXGI_FRAME_STATISTICS_MEDIA = Struct("DXGI_FRAME_STATISTICS_MEDIA", [
841 (UINT, "PresentCount"),
842 (UINT, "PresentRefreshCount"),
843 (UINT, "SyncRefreshCount"),
844 (LARGE_INTEGER, "SyncQPCTime"),
845 (LARGE_INTEGER, "SyncGPUTime"),
846 (DXGI_FRAME_PRESENTATION_MODE, "CompositionMode"),
847 (UINT, "ApprovedPresentDuration"),
848])
849
850IDXGISwapChainMedia = Interface("IDXGISwapChainMedia", IUnknown)
851IDXGISwapChainMedia.methods += [
852 StdMethod(HRESULT, "GetFrameStatisticsMedia", [Out(Pointer(DXGI_FRAME_STATISTICS_MEDIA), "pStats")], sideeffects=False),
853 StdMethod(HRESULT, "SetPresentDuration", [(UINT, "Duration")]),
854 StdMethod(HRESULT, "CheckPresentDurationSupport", [(UINT, "DesiredPresentDuration"), Out(Pointer(UINT), "pClosestSmallerPresentDuration"), Out(Pointer(UINT), "pClosestLargerPresentDuration")], sideeffects=False),
855]
856
857DXGI_OVERLAY_SUPPORT_FLAG = FakeEnum(UINT, [
858 "DXGI_OVERLAY_SUPPORT_FLAG_DIRECT",
859 "DXGI_OVERLAY_SUPPORT_FLAG_SCALING",
860])
861
862IDXGIOutput3 = Interface("IDXGIOutput3", IDXGIOutput2)
863IDXGIOutput3.methods += [
864 StdMethod(HRESULT, "CheckOverlaySupport", [(DXGI_FORMAT, "EnumFormat"), (ObjPointer(IUnknown), "pConcernedDevice"), Out(Pointer(DXGI_OVERLAY_SUPPORT_FLAG), "pFlags")], sideeffects=False),
865]
866
867dxgi.addInterfaces([
868 IDXGIDevice3,
869 IDXGISwapChain2,
870 IDXGISwapChainMedia,
871 IDXGIOutput3,
872 IDXGIFactory3,
873 IDXGIFactoryMedia,
874])