blob: f60b9a88213f122d99a8e3f345b02e96ec8abde7 [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
Piotr Podsiadły0b8b0192019-01-03 20:39:55 +010028from .winapi import *
Jose Fonseca06127f62015-03-14 10:53:52 +000029
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",
Jose Fonseca4d5cfa42015-07-17 16:21:05 +0100174 # IDXGIKeyedMutex::AcquireSync
175 "WAIT_ABANDONED",
176 "WAIT_TIMEOUT",
Jose Fonseca06127f62015-03-14 10:53:52 +0000177])
178
179
180DXGI_RGB = Struct("DXGI_RGB", [
181 (Float, "Red"),
182 (Float, "Green"),
183 (Float, "Blue"),
184])
185
186DXGI_GAMMA_CONTROL = Struct("DXGI_GAMMA_CONTROL", [
187 (DXGI_RGB, "Scale"),
188 (DXGI_RGB, "Offset"),
189 (Array(DXGI_RGB, 1025), "GammaCurve"),
190])
191
192DXGI_GAMMA_CONTROL_CAPABILITIES = Struct("DXGI_GAMMA_CONTROL_CAPABILITIES", [
193 (BOOL, "ScaleAndOffsetSupported"),
194 (Float, "MaxConvertedValue"),
195 (Float, "MinConvertedValue"),
196 (UINT, "NumGammaControlPoints"),
197 (Array(Float, "{self}.NumGammaControlPoints"), "ControlPointPositions"),
198])
199
200DXGI_RATIONAL = Struct("DXGI_RATIONAL", [
201 (UINT, "Numerator"),
202 (UINT, "Denominator"),
203])
204
205DXGI_MODE_SCANLINE_ORDER = Enum("DXGI_MODE_SCANLINE_ORDER", [
206 "DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED",
207 "DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE",
208 "DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST",
209 "DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST",
210])
211
212DXGI_MODE_SCALING = Enum("DXGI_MODE_SCALING", [
213 "DXGI_MODE_SCALING_UNSPECIFIED",
214 "DXGI_MODE_SCALING_CENTERED",
215 "DXGI_MODE_SCALING_STRETCHED",
216])
217
218DXGI_MODE_ROTATION = Enum("DXGI_MODE_ROTATION", [
219 "DXGI_MODE_ROTATION_UNSPECIFIED",
220 "DXGI_MODE_ROTATION_IDENTITY",
221 "DXGI_MODE_ROTATION_ROTATE90",
222 "DXGI_MODE_ROTATION_ROTATE180",
223 "DXGI_MODE_ROTATION_ROTATE270",
224])
225
226DXGI_MODE_DESC = Struct("DXGI_MODE_DESC", [
227 (UINT, "Width"),
228 (UINT, "Height"),
229 (DXGI_RATIONAL, "RefreshRate"),
230 (DXGI_FORMAT, "Format"),
231 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
232 (DXGI_MODE_SCALING, "Scaling"),
233])
234
Jose Fonseca64cb4522018-12-18 16:36:55 +0000235DXGI_QUALITY_LEVEL = FakeEnum(UINT, [
236 "DXGI_STANDARD_MULTISAMPLE_QUALITY_PATTERN",
237 "DXGI_CENTER_MULTISAMPLE_QUALITY_PATTERN",
238])
239
Jose Fonseca06127f62015-03-14 10:53:52 +0000240DXGI_SAMPLE_DESC = Struct("DXGI_SAMPLE_DESC", [
241 (UINT, "Count"),
Jose Fonseca64cb4522018-12-18 16:36:55 +0000242 (DXGI_QUALITY_LEVEL, "Quality"),
Jose Fonseca06127f62015-03-14 10:53:52 +0000243])
244
245DXGI_RGBA = Struct("DXGI_RGBA", [
246 (Float, "r"),
247 (Float, "g"),
248 (Float, "b"),
249 (Float, "a"),
250])
José Fonsecaaf7d2312011-07-07 10:16:57 +0100251
José Fonsecaca55d162012-04-16 13:05:47 +0100252
253IDXGIObject = Interface("IDXGIObject", IUnknown)
254IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject)
255IDXGIResource = Interface("IDXGIResource", IDXGIDeviceSubObject)
256IDXGIKeyedMutex = Interface("IDXGIKeyedMutex", IDXGIDeviceSubObject)
257IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject)
258IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface)
259IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
260IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
261IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
262IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
263IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
264IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory)
265IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter)
266IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice)
267
268
269DXGI_USAGE = Flags(UINT, [
José Fonseca467a42a2012-05-04 11:49:19 +0100270 "DXGI_CPU_ACCESS_NONE", # 0
271 "DXGI_CPU_ACCESS_SCRATCH", # 3
272 "DXGI_CPU_ACCESS_DYNAMIC", # 1
273 "DXGI_CPU_ACCESS_READ_WRITE", # 2
José Fonsecaca55d162012-04-16 13:05:47 +0100274 "DXGI_USAGE_SHADER_INPUT",
275 "DXGI_USAGE_RENDER_TARGET_OUTPUT",
276 "DXGI_USAGE_BACK_BUFFER",
277 "DXGI_USAGE_SHARED",
278 "DXGI_USAGE_READ_ONLY",
279 "DXGI_USAGE_DISCARD_ON_PRESENT",
280 "DXGI_USAGE_UNORDERED_ACCESS",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100281])
282
José Fonsecaca55d162012-04-16 13:05:47 +0100283DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [
284 (UINT, "PresentCount"),
285 (UINT, "PresentRefreshCount"),
286 (UINT, "SyncRefreshCount"),
287 (LARGE_INTEGER, "SyncQPCTime"),
288 (LARGE_INTEGER, "SyncGPUTime"),
289])
290
291DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [
292 (INT, "Pitch"),
José Fonsecafc047bb2013-05-29 19:28:03 +0100293 (LinearPointer(BYTE, "_MappedSize"), "pBits"),
José Fonsecaca55d162012-04-16 13:05:47 +0100294])
295
296DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [
297 (WString, "Description"),
298 (UINT, "VendorId"),
299 (UINT, "DeviceId"),
300 (UINT, "SubSysId"),
301 (UINT, "Revision"),
302 (SIZE_T, "DedicatedVideoMemory"),
303 (SIZE_T, "DedicatedSystemMemory"),
304 (SIZE_T, "SharedSystemMemory"),
305 (LUID, "AdapterLuid"),
306])
307
308DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [
309 (WString, "DeviceName"),
310 (RECT, "DesktopCoordinates"),
311 (BOOL, "AttachedToDesktop"),
312 (DXGI_MODE_ROTATION, "Rotation"),
313 (HMONITOR, "Monitor"),
314])
315
316DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [
317 (HANDLE, "Handle"),
318])
319
320DXGI_RESOURCE_PRIORITY = FakeEnum(UINT, [
321 "DXGI_RESOURCE_PRIORITY_MINIMUM",
322 "DXGI_RESOURCE_PRIORITY_LOW",
323 "DXGI_RESOURCE_PRIORITY_NORMAL",
324 "DXGI_RESOURCE_PRIORITY_HIGH",
325 "DXGI_RESOURCE_PRIORITY_MAXIMUM",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100326])
327
328DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [
329 "DXGI_RESIDENCY_FULLY_RESIDENT",
330 "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY",
331 "DXGI_RESIDENCY_EVICTED_TO_DISK",
332])
333
334DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [
335 (UINT, "Width"),
336 (UINT, "Height"),
337 (DXGI_FORMAT, "Format"),
338 (DXGI_SAMPLE_DESC, "SampleDesc"),
339])
340
José Fonsecaca55d162012-04-16 13:05:47 +0100341DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [
342 "DXGI_SWAP_EFFECT_DISCARD",
343 "DXGI_SWAP_EFFECT_SEQUENTIAL",
Jose Fonseca6bb1bf32015-07-17 11:55:23 +0100344 "DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL",
Jose Fonseca3dccc202018-12-04 12:29:00 +0000345 "DXGI_SWAP_EFFECT_FLIP_DISCARD",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100346])
347
José Fonsecaca55d162012-04-16 13:05:47 +0100348DXGI_SWAP_CHAIN_FLAG = Flags(UINT, [
José Fonsecaaf7d2312011-07-07 10:16:57 +0100349 "DXGI_SWAP_CHAIN_FLAG_NONPREROTATED",
350 "DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH",
351 "DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE",
Jose Fonseca6bb1bf32015-07-17 11:55:23 +0100352 "DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT",
353 "DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER",
354 "DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY",
355 "DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT",
356 "DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER",
357 "DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO",
358 "DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO",
Jose Fonseca3dccc202018-12-04 12:29:00 +0000359 "DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED",
360 "DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING",
Jose Fonsecad82b88e2018-12-05 10:44:47 +0000361 #"DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS", # DXGI 1.6
José Fonsecaaf7d2312011-07-07 10:16:57 +0100362])
363
364DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [
365 (DXGI_MODE_DESC, "BufferDesc"),
366 (DXGI_SAMPLE_DESC, "SampleDesc"),
367 (DXGI_USAGE, "BufferUsage"),
368 (UINT, "BufferCount"),
369 (HWND, "OutputWindow"),
370 (BOOL, "Windowed"),
371 (DXGI_SWAP_EFFECT, "SwapEffect"),
José Fonsecaca55d162012-04-16 13:05:47 +0100372 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
373])
374
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500375
José Fonsecaca55d162012-04-16 13:05:47 +0100376IDXGIObject.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100377 StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False),
378 StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False),
José Fonseca9eec9342014-10-03 22:24:50 +0100379 StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), InOut(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100380 StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]),
381]
382
383IDXGIDeviceSubObject.methods += [
384 StdMethod(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppDevice")]),
385]
386
Jose Fonseca559b5f82015-07-17 16:58:50 +0100387SHARED_HANDLE = Handle("shared_handle", RAW_HANDLE)
388
José Fonsecaca55d162012-04-16 13:05:47 +0100389IDXGIResource.methods += [
Jose Fonseca559b5f82015-07-17 16:58:50 +0100390 StdMethod(HRESULT, "GetSharedHandle", [Out(Pointer(SHARED_HANDLE), "pSharedHandle")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100391 StdMethod(HRESULT, "GetUsage", [Out(Pointer(DXGI_USAGE), "pUsage")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100392 StdMethod(HRESULT, "SetEvictionPriority", [(DXGI_RESOURCE_PRIORITY, "EvictionPriority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100393 StdMethod(HRESULT, "GetEvictionPriority", [Out(Pointer(DXGI_RESOURCE_PRIORITY), "pEvictionPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100394]
395
Jose Fonseca4d5cfa42015-07-17 16:21:05 +0100396DWORD_TIMEOUT = FakeEnum(DWORD, [
397 "INFINITE",
398])
399
José Fonsecaca55d162012-04-16 13:05:47 +0100400IDXGIKeyedMutex.methods += [
Jose Fonsecabfdf93e2019-06-26 13:03:27 +0100401 StdMethod(HRESULT, "AcquireSync", [(UINT64, "Key"), (DWORD_TIMEOUT, "dwMilliseconds")], sideeffects=False),
Jose Fonseca7da30bb2019-07-29 14:17:14 +0100402 StdMethod(HRESULT, "ReleaseSync", [(UINT64, "Key")]),
José Fonsecaca55d162012-04-16 13:05:47 +0100403]
404
405DXGI_MAP = Flags(UINT, [
406 "DXGI_MAP_READ",
407 "DXGI_MAP_WRITE",
408 "DXGI_MAP_DISCARD",
409])
410
411IDXGISurface.methods += [
José Fonseca3f174372012-05-08 12:09:42 +0100412 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "pDesc")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100413 StdMethod(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect"), (DXGI_MAP, "MapFlags")]),
414 StdMethod(HRESULT, "Unmap", []),
415]
416
417IDXGISurface1.methods += [
418 StdMethod(HRESULT, "GetDC", [(BOOL, "Discard"), Out(Pointer(HDC), "phdc")]),
419 StdMethod(HRESULT, "ReleaseDC", [(Pointer(RECT), "pDirtyRect")]),
420]
421
422IDXGIAdapter.methods += [
423 StdMethod(HRESULT, "EnumOutputs", [(UINT, "Output"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100424 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "pDesc")], sideeffects=False),
425 StdMethod(HRESULT, "CheckInterfaceSupport", [(REFGUID, "InterfaceName"), Out(Pointer(LARGE_INTEGER), "pUMDVersion")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100426]
427
428DXGI_ENUM_MODES = Flags(UINT, [
429 "DXGI_ENUM_MODES_INTERLACED",
430 "DXGI_ENUM_MODES_SCALING",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100431 "DXGI_ENUM_MODES_STEREO",
432 "DXGI_ENUM_MODES_DISABLED_STEREO",
José Fonsecaca55d162012-04-16 13:05:47 +0100433])
434
435IDXGIOutput.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100436 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "pDesc")], sideeffects=False),
José Fonseca7f1403c2014-10-03 22:16:19 +0100437 StdMethod(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC, "*pNumModes"), "pDesc")], sideeffects=False),
438 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 +0100439 StdMethod(HRESULT, "WaitForVBlank", []),
440 StdMethod(HRESULT, "TakeOwnership", [(ObjPointer(IUnknown), "pDevice"), (BOOL, "Exclusive")]),
441 StdMethod(Void, "ReleaseOwnership", []),
José Fonseca28829ec2014-08-19 20:41:41 +0100442 StdMethod(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "pGammaCaps")], sideeffects=False),
Jose Fonseca7f7d8e42018-01-05 22:14:54 +0000443 StdMethod(HRESULT, "SetGammaControl", [(Pointer(Const(DXGI_GAMMA_CONTROL)), "pArray")], sideeffects=False), # Avoid NumGammaControlPoints mismatch
José Fonseca45fff9c2012-05-08 09:07:27 +0100444 StdMethod(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "pArray")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100445 StdMethod(HRESULT, "SetDisplaySurface", [(ObjPointer(IDXGISurface), "pScanoutSurface")]),
446 StdMethod(HRESULT, "GetDisplaySurfaceData", [(ObjPointer(IDXGISurface), "pDestination")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100447 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100448]
449
450DXGI_PRESENT = Flags(UINT, [
451 "DXGI_PRESENT_TEST",
452 "DXGI_PRESENT_DO_NOT_SEQUENCE",
453 "DXGI_PRESENT_RESTART",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100454 "DXGI_PRESENT_DO_NOT_WAIT",
455 "DXGI_PRESENT_STEREO_PREFER_RIGHT",
456 "DXGI_PRESENT_STEREO_TEMPORARY_MONO",
457 "DXGI_PRESENT_RESTRICT_TO_OUTPUT",
458 "DXGI_PRESENT_USE_DURATION",
José Fonsecaca55d162012-04-16 13:05:47 +0100459])
460
461IDXGISwapChain.methods += [
462 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
463 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
464 StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
465 StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100466 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
José Fonsecaf450d8b2012-11-20 14:48:31 +0000467 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
José Fonsecaca55d162012-04-16 13:05:47 +0100468 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
469 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100470 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
471 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100472]
473
474DXGI_MWA = Flags(UINT, [
475 "DXGI_MWA_NO_WINDOW_CHANGES",
476 "DXGI_MWA_NO_ALT_ENTER",
477 "DXGI_MWA_NO_PRINT_SCREEN",
478 "DXGI_MWA_VALID",
479])
480
481IDXGIFactory.methods += [
482 StdMethod(HRESULT, "EnumAdapters", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
José Fonseca0ac329d2015-02-19 20:13:44 +0000483 StdMethod(HRESULT, "MakeWindowAssociation", [(HWND, "WindowHandle"), (DXGI_MWA, "Flags")], sideeffects=False),
José Fonseca45fff9c2012-05-08 09:07:27 +0100484 StdMethod(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "pWindowHandle")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100485 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]),
486 StdMethod(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "Module"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
487]
488
489IDXGIDevice.methods += [
490 StdMethod(HRESULT, "GetAdapter", [Out(Pointer(ObjPointer(IDXGIAdapter)), "pAdapter")]),
491 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 +0100492 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 +0100493 StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100494 StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100495]
496
José Fonsecafd9d01d2014-09-03 22:08:30 +0100497DXGI_ADAPTER_FLAG = FakeEnum(UINT, [
José Fonsecaca55d162012-04-16 13:05:47 +0100498 "DXGI_ADAPTER_FLAG_NONE",
499 "DXGI_ADAPTER_FLAG_REMOTE",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100500 "DXGI_ADAPTER_FLAG_SOFTWARE",
José Fonsecaca55d162012-04-16 13:05:47 +0100501])
502
503DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [
504 (WString, "Description"),
505 (UINT, "VendorId"),
506 (UINT, "DeviceId"),
507 (UINT, "SubSysId"),
508 (UINT, "Revision"),
509 (SIZE_T, "DedicatedVideoMemory"),
510 (SIZE_T, "DedicatedSystemMemory"),
511 (SIZE_T, "SharedSystemMemory"),
512 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100513 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100514])
515
José Fonsecaca55d162012-04-16 13:05:47 +0100516DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [
517 (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"),
518 (Array(Array(FLOAT, 16), 2), "WhitePoints"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100519])
520
José Fonsecaca55d162012-04-16 13:05:47 +0100521IDXGIFactory1.methods += [
522 StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]),
523 StdMethod(BOOL, "IsCurrent", []),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100524]
525
José Fonsecaca55d162012-04-16 13:05:47 +0100526IDXGIAdapter1.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100527 StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100528]
529
José Fonsecaca55d162012-04-16 13:05:47 +0100530IDXGIDevice1.methods += [
531 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100532 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100533]
534
José Fonsecaf450d8b2012-11-20 14:48:31 +0000535
José Fonsecafd9d01d2014-09-03 22:08:30 +0100536dxgi = Module('dxgi')
537dxgi.addInterfaces([
538 IDXGIKeyedMutex,
539 IDXGIFactory1,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100540 IDXGIDevice1,
541 IDXGIAdapter1,
542 IDXGIResource,
543])
544dxgi.addFunctions([
545 StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
546 StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
Michal Krol1c632022019-09-04 13:25:06 +0100547 StdFunction(HRESULT, "DXGID3D10CreateDevice", [(HMODULE, "hModule"), (ObjPointer(IDXGIFactory), "pFactory"), (ObjPointer(IDXGIAdapter), "pAdapter"), (UINT, "Flags"), (OpaquePointer(Const(IUnknown)), "pUnknown"), Out(Pointer(ObjPointer(Void)), "ppDevice")], internal=True),
548 StdFunction(HRESULT, "DXGID3D10CreateLayeredDevice", [(UINT), (UINT), (UINT), (UINT), (UINT)], internal=True),
549 StdFunction(SIZE_T, "DXGID3D10GetLayeredDeviceSize", [(OpaqueArray(Const(Void), "NumLayers"), "pLayers"), (UINT, "NumLayers")], internal=True),
550 StdFunction(HRESULT, "DXGID3D10RegisterLayers", [(OpaqueArray(Const(Void), "NumLayers"), "pLayers"), (UINT, "NumLayers")], internal=True),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100551])
552
553
554
555#
556# DXGI 1.2
557#
558
559IDXGIDisplayControl = Interface("IDXGIDisplayControl", IUnknown)
560IDXGIDisplayControl.methods += [
561 StdMethod(BOOL, "IsStereoEnabled", [], sideeffects=False),
562 StdMethod(Void, "SetStereoEnabled", [(BOOL, "enabled")]),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500563]
564
José Fonsecafd9d01d2014-09-03 22:08:30 +0100565DXGI_OUTDUPL_MOVE_RECT = Struct("DXGI_OUTDUPL_MOVE_RECT", [
566 (POINT, "SourcePoint"),
567 (RECT, "DestinationRect"),
568])
569
570DXGI_OUTDUPL_DESC = Struct("DXGI_OUTDUPL_DESC", [
571 (DXGI_MODE_DESC, "ModeDesc"),
572 (DXGI_MODE_ROTATION, "Rotation"),
573 (BOOL, "DesktopImageInSystemMemory"),
574])
575
576DXGI_OUTDUPL_POINTER_POSITION = Struct("DXGI_OUTDUPL_POINTER_POSITION", [
577 (POINT, "Position"),
578 (BOOL, "Visible"),
579])
580
581DXGI_OUTDUPL_POINTER_SHAPE_TYPE = Enum("DXGI_OUTDUPL_POINTER_SHAPE_TYPE", [
582 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME",
583 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR",
584 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR",
585])
586
587DXGI_OUTDUPL_POINTER_SHAPE_INFO = Struct("DXGI_OUTDUPL_POINTER_SHAPE_INFO", [
588 (UINT, "Type"),
589 (UINT, "Width"),
590 (UINT, "Height"),
591 (UINT, "Pitch"),
592 (POINT, "HotSpot"),
593])
594
595DXGI_OUTDUPL_FRAME_INFO = Struct("DXGI_OUTDUPL_FRAME_INFO", [
596 (LARGE_INTEGER, "LastPresentTime"),
597 (LARGE_INTEGER, "LastMouseUpdateTime"),
598 (UINT, "AccumulatedFrames"),
599 (BOOL, "RectsCoalesced"),
600 (BOOL, "ProtectedContentMaskedOut"),
601 (DXGI_OUTDUPL_POINTER_POSITION, "PointerPosition"),
602 (UINT, "TotalMetadataBufferSize"),
603 (UINT, "PointerShapeBufferSize"),
604])
605
606IDXGIOutputDuplication = Interface("IDXGIOutputDuplication", IDXGIObject)
607IDXGIOutputDuplication.methods += [
608 StdMethod(Void, "GetDesc", [Out(Pointer(DXGI_OUTDUPL_DESC), "pDesc")], sideeffects=False),
609 StdMethod(HRESULT, "AcquireNextFrame", [(UINT, "TimeoutInMilliseconds"), Out(Pointer(DXGI_OUTDUPL_FRAME_INFO), "pFrameInfo"), Out(Pointer(ObjPointer(IDXGIResource)), "ppDesktopResource")]),
610 StdMethod(HRESULT, "GetFrameDirtyRects", [(UINT, "DirtyRectsBufferSize"), Out(Array(RECT, "DirtyRectsBufferSize"), "pDirtyRectsBuffer"), Out(Pointer(UINT), "pDirtyRectsBufferSizeRequired")], sideeffects=False),
611 StdMethod(HRESULT, "GetFrameMoveRects", [(UINT, "MoveRectsBufferSize"), Out(Array(DXGI_OUTDUPL_MOVE_RECT, "MoveRectsBufferSize"), "pMoveRectBuffer"), Out(Pointer(UINT), "pMoveRectsBufferSizeRequired")], sideeffects=False),
612 StdMethod(HRESULT, "GetFramePointerShape", [(UINT, "PointerShapeBufferSize"), Out(OpaqueBlob(Void, "PointerShapeBufferSize"), "pPointerShapeBuffer"), Out(Pointer(UINT), "pPointerShapeBufferSizeRequired"), Out(Pointer(DXGI_OUTDUPL_POINTER_SHAPE_INFO), "pPointerShapeInfo")], sideeffects=False),
613 StdMethod(HRESULT, "MapDesktopSurface", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect")], sideeffects=False),
614 StdMethod(HRESULT, "UnMapDesktopSurface", [], sideeffects=False),
615 StdMethod(HRESULT, "ReleaseFrame", []),
616]
617
618DXGI_ALPHA_MODE = Enum("DXGI_ALPHA_MODE", [
619 "DXGI_ALPHA_MODE_UNSPECIFIED",
620 "DXGI_ALPHA_MODE_PREMULTIPLIED",
621 "DXGI_ALPHA_MODE_STRAIGHT",
622 "DXGI_ALPHA_MODE_IGNORE",
623])
624
625IDXGISurface2 = Interface("IDXGISurface2", IDXGISurface1)
626IDXGISurface2.methods += [
627 StdMethod(HRESULT, "GetResource", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParentResource"), Out(Pointer(UINT), "pSubresourceIndex")]),
628]
629
630DXGI_SHARED_RESOURCE_FLAG = Flags(DWORD, [
631 "DXGI_SHARED_RESOURCE_READ",
632 "DXGI_SHARED_RESOURCE_WRITE",
633])
634
635IDXGIResource1 = Interface("IDXGIResource1", IDXGIResource)
636IDXGIResource1.methods += [
637 StdMethod(HRESULT, "CreateSubresourceSurface", [(UINT, "index"), Out(Pointer(ObjPointer(IDXGISurface2)), "ppSurface")]),
638 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 -0500639]
640
641DXGI_OFFER_RESOURCE_PRIORITY = Enum("DXGI_OFFER_RESOURCE_PRIORITY", [
642 "DXGI_OFFER_RESOURCE_PRIORITY_LOW",
643 "DXGI_OFFER_RESOURCE_PRIORITY_NORMAL",
644 "DXGI_OFFER_RESOURCE_PRIORITY_HIGH",
645])
646
José Fonsecafd9d01d2014-09-03 22:08:30 +0100647IDXGIDevice2 = Interface("IDXGIDevice2", IDXGIDevice1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500648IDXGIDevice2.methods += [
649 StdMethod(HRESULT, "OfferResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), (DXGI_OFFER_RESOURCE_PRIORITY, "Priority")]),
650 StdMethod(HRESULT, "ReclaimResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), Out(Pointer(BOOL), "pDiscarded")]),
Jose Fonsecab7f35822020-03-05 14:26:51 +0000651 StdMethod(HRESULT, "EnqueueSetEvent", [(HANDLE, "hEvent")], sideeffects=False),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500652]
653
José Fonsecafd9d01d2014-09-03 22:08:30 +0100654DXGI_MODE_DESC1 = Struct("DXGI_MODE_DESC1", [
655 (UINT, "Width"),
656 (UINT, "Height"),
657 (DXGI_RATIONAL, "RefreshRate"),
658 (DXGI_FORMAT, "Format"),
659 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
660 (DXGI_MODE_SCALING, "Scaling"),
661 (BOOL, "Stereo"),
662])
663
664DXGI_SCALING = Enum("DXGI_SCALING", [
665 "DXGI_SCALING_STRETCH",
666 "DXGI_SCALING_NONE",
667 "DXGI_SCALING_ASPECT_RATIO_STRETCH",
668])
669
670DXGI_SWAP_CHAIN_DESC1 = Struct("DXGI_SWAP_CHAIN_DESC1", [
671 (UINT, "Width"),
672 (UINT, "Height"),
673 (DXGI_FORMAT, "Format"),
674 (BOOL, "Stereo"),
675 (DXGI_SAMPLE_DESC, "SampleDesc"),
676 (DXGI_USAGE, "BufferUsage"),
677 (UINT, "BufferCount"),
678 (DXGI_SCALING, "Scaling"),
679 (DXGI_SWAP_EFFECT, "SwapEffect"),
680 (DXGI_ALPHA_MODE, "AlphaMode"),
681 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
682])
683
684DXGI_SWAP_CHAIN_FULLSCREEN_DESC = Struct("DXGI_SWAP_CHAIN_FULLSCREEN_DESC", [
685 (DXGI_RATIONAL, "RefreshRate"),
686 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
687 (DXGI_MODE_SCALING, "Scaling"),
688 (BOOL, "Windowed"),
689])
690
691DXGI_PRESENT_PARAMETERS = Struct("DXGI_PRESENT_PARAMETERS", [
692 (UINT, "DirtyRectsCount"),
693 (Array(RECT, "{self}.DirtyRectsCount"), "pDirtyRects"),
694 (Pointer(RECT), "pScrollRect"),
695 (Pointer(POINT), "pScrollOffset"),
696])
697
698IDXGISwapChain1 = Interface("IDXGISwapChain1", IDXGISwapChain)
699IDXGISwapChain1.methods += [
700 StdMethod(HRESULT, "GetDesc1", [(Out(Pointer(DXGI_SWAP_CHAIN_DESC1), "pDesc"))], sideeffects=False),
701 StdMethod(HRESULT, "GetFullscreenDesc", [(Out(Pointer(DXGI_SWAP_CHAIN_FULLSCREEN_DESC), "pDesc"))], sideeffects=False),
702 StdMethod(HRESULT, "GetHwnd", [(Out(Pointer(HWND), "pHwnd"))], sideeffects=False),
703 StdMethod(HRESULT, "GetCoreWindow", [(REFIID, "riid"), (Out(Pointer(ObjPointer(Void)), "ppUnk"))]),
704 StdMethod(HRESULT, "Present1", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags"), (Pointer(Const(DXGI_PRESENT_PARAMETERS)), "pPresentParameters")]),
705 StdMethod(BOOL, "IsTemporaryMonoSupported", [], sideeffects=False),
706 StdMethod(HRESULT, "GetRestrictToOutput", [(Out(Pointer(ObjPointer(IDXGIOutput)), "ppRestrictToOutput"))]),
707 StdMethod(HRESULT, "SetBackgroundColor", [(Pointer(Const(DXGI_RGBA)), "pColor")]),
708 StdMethod(HRESULT, "GetBackgroundColor", [(Out(Pointer(DXGI_RGBA), "pColor"))], sideeffects=False),
709 StdMethod(HRESULT, "SetRotation", [(DXGI_MODE_ROTATION, "Rotation")]),
710 StdMethod(HRESULT, "GetRotation", [(Out(Pointer(DXGI_MODE_ROTATION), "pRotation"))], sideeffects=False),
711]
712
713IDXGIFactory2 = Interface("IDXGIFactory2", IDXGIFactory1)
714IDXGIFactory2.methods += [
715 StdMethod(BOOL, "IsWindowedStereoEnabled", [], sideeffects=False),
Jose Fonseca3dccc202018-12-04 12:29:00 +0000716 StdMethod(HRESULT, "CreateSwapChainForHwnd", [(ObjPointer(IUnknown), "pDevice"), (HWND, "hWnd"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (Pointer(Const(DXGI_SWAP_CHAIN_FULLSCREEN_DESC)), "pFullscreenDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100717 StdMethod(HRESULT, "CreateSwapChainForCoreWindow", [(ObjPointer(IUnknown), "pDevice"), (ObjPointer(IUnknown), "pWindow"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
718 StdMethod(HRESULT, "GetSharedResourceAdapterLuid", [(HANDLE, "hResource"), Out(Pointer(LUID), "pLuid")], sideeffects=False),
José Fonseca40a9fe42014-09-17 19:04:55 +0100719 StdMethod(HRESULT, "RegisterStereoStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
720 StdMethod(HRESULT, "RegisterStereoStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
721 StdMethod(Void, "UnregisterStereoStatus", [(DWORD, "dwCookie")], sideeffects=False),
722 StdMethod(HRESULT, "RegisterOcclusionStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
723 StdMethod(HRESULT, "RegisterOcclusionStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
724 StdMethod(Void, "UnregisterOcclusionStatus", [(DWORD, "dwCookie")], sideeffects=False),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100725 StdMethod(HRESULT, "CreateSwapChainForComposition", [(ObjPointer(IUnknown), "pDevice"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
726]
727
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500728DXGI_GRAPHICS_PREEMPTION_GRANULARITY = Enum("DXGI_GRAPHICS_PREEMPTION_GRANULARITY", [
729 "DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY",
730 "DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY",
731 "DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY",
732 "DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY",
733 "DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY",
734])
735
736DXGI_COMPUTE_PREEMPTION_GRANULARITY = Enum("DXGI_COMPUTE_PREEMPTION_GRANULARITY", [
737 "DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY",
738 "DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY",
739 "DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY",
740 "DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY",
741 "DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY",
742])
743
744DXGI_ADAPTER_DESC2 = Struct("DXGI_ADAPTER_DESC2", [
745 (WString, "Description"),
746 (UINT, "VendorId"),
747 (UINT, "DeviceId"),
748 (UINT, "SubSysId"),
749 (UINT, "Revision"),
750 (SIZE_T, "DedicatedVideoMemory"),
751 (SIZE_T, "DedicatedSystemMemory"),
752 (SIZE_T, "SharedSystemMemory"),
753 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100754 (DXGI_ADAPTER_FLAG, "Flags"),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500755 (DXGI_GRAPHICS_PREEMPTION_GRANULARITY, "GraphicsPreemptionGranularity"),
756 (DXGI_COMPUTE_PREEMPTION_GRANULARITY, "ComputePreemptionGranularity"),
757])
758
José Fonsecafd9d01d2014-09-03 22:08:30 +0100759IDXGIAdapter2 = Interface("IDXGIAdapter2", IDXGIAdapter1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500760IDXGIAdapter2.methods += [
761 StdMethod(HRESULT, "GetDesc2", [Out(Pointer(DXGI_ADAPTER_DESC2), "pDesc")], sideeffects=False),
762]
José Fonsecaf450d8b2012-11-20 14:48:31 +0000763
José Fonsecafd9d01d2014-09-03 22:08:30 +0100764IDXGIOutput1 = Interface("IDXGIOutput1", IDXGIOutput)
765IDXGIOutput1.methods += [
José Fonseca7f1403c2014-10-03 22:16:19 +0100766 StdMethod(HRESULT, "GetDisplayModeList1", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), InOut(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC1, "*pNumModes"), "pDesc")], sideeffects=False),
767 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 +0100768 StdMethod(HRESULT, "GetDisplaySurfaceData1", [(ObjPointer(IDXGIResource), "pDestination")]),
769 StdMethod(HRESULT, "DuplicateOutput", [(ObjPointer(IUnknown), "pDevice"), Out(Pointer(ObjPointer(IDXGIOutputDuplication)), "ppOutputDuplication")]),
José Fonseca2f439632014-08-27 14:15:44 +0100770]
771
José Fonsecacdefc482012-11-16 20:06:20 +0000772dxgi.addInterfaces([
José Fonseca818d9f02014-09-14 19:41:31 +0100773 IDXGIDisplayControl,
José Fonseca2f439632014-08-27 14:15:44 +0100774 IDXGIDevice2,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100775 IDXGISwapChain1,
776 IDXGIFactory2,
José Fonseca2f439632014-08-27 14:15:44 +0100777 IDXGIResource1,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100778 IDXGIAdapter2,
779 IDXGIOutput1,
José Fonsecaca55d162012-04-16 13:05:47 +0100780])
José Fonseca51a7bde2014-09-03 22:26:21 +0100781
782#
783# DXGI 1.3
784#
785
786DXGI_CREATE_FACTORY_FLAGS = Flags(UINT, [
787 "DXGI_CREATE_FACTORY_DEBUG",
788])
789
790dxgi.addFunctions([
791 StdFunction(HRESULT, "CreateDXGIFactory2", [(DXGI_CREATE_FACTORY_FLAGS, "Flags"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
792])
793
794IDXGIDevice3 = Interface("IDXGIDevice3", IDXGIDevice2)
795IDXGIDevice3.methods += [
796 StdMethod(Void, "Trim", []),
797]
798
799DXGI_MATRIX_3X2_F = Struct("DXGI_MATRIX_3X2_F", [
800 (FLOAT, "_11"),
801 (FLOAT, "_12"),
802 (FLOAT, "_21"),
803 (FLOAT, "_22"),
804 (FLOAT, "_31"),
805 (FLOAT, "_32"),
806])
807
808IDXGISwapChain2 = Interface("IDXGISwapChain2", IDXGISwapChain1)
809IDXGISwapChain2.methods += [
810 StdMethod(HRESULT, "SetSourceSize", [(UINT, "Width"), (UINT, "Height")]),
811 StdMethod(HRESULT, "GetSourceSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
812 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
813 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
814 StdMethod(HANDLE, "GetFrameLatencyWaitableObject", [], sideeffects=False),
815 StdMethod(HRESULT, "SetMatrixTransform", [(Pointer(Const(DXGI_MATRIX_3X2_F)), "pMatrix")]),
816 StdMethod(HRESULT, "GetMatrixTransform", [Out(Pointer(DXGI_MATRIX_3X2_F), "pMatrix")], sideeffects=False),
817]
818
819IDXGIOutput2 = Interface("IDXGIOutput2", IDXGIOutput1)
820IDXGIOutput2.methods += [
821 StdMethod(BOOL, "SupportsOverlays", [], sideeffects=False),
822]
823
824IDXGIFactory3 = Interface("IDXGIFactory3", IDXGIFactory2)
825IDXGIFactory3.methods += [
826 StdMethod(DXGI_CREATE_FACTORY_FLAGS, "GetCreationFlags", [], sideeffects=False),
827]
828
829DXGI_DECODE_SWAP_CHAIN_DESC = Struct("DXGI_DECODE_SWAP_CHAIN_DESC", [
830 (UINT, "Flags"),
831])
832
833# XXX: Flags
834DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS = Enum("DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS", [
835 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE",
836 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709",
837 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC",
838])
839
840IDXGIDecodeSwapChain = Interface("IDXGIDecodeSwapChain", IUnknown)
841IDXGIDecodeSwapChain.methods += [
842 StdMethod(HRESULT, "PresentBuffer", [(UINT, "BufferToPresent"), (UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
843 StdMethod(HRESULT, "SetSourceRect", [(Pointer(Const(RECT)), "pRect")]),
844 StdMethod(HRESULT, "SetTargetRect", [(Pointer(Const(RECT)), "pRect")]),
845 StdMethod(HRESULT, "SetDestSize", [(UINT, "Width"), (UINT, "Height")]),
846 StdMethod(HRESULT, "GetSourceRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
847 StdMethod(HRESULT, "GetTargetRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
848 StdMethod(HRESULT, "GetDestSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
849 StdMethod(HRESULT, "SetColorSpace", [(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "ColorSpace")]),
850 StdMethod(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "GetColorSpace", [], sideeffects=False),
851]
852
853IDXGIFactoryMedia = Interface("IDXGIFactoryMedia", IUnknown)
854IDXGIFactoryMedia.methods += [
855 StdMethod(HRESULT, "CreateSwapChainForCompositionSurfaceHandle", [(ObjPointer(IUnknown), "pDevice"), (HANDLE, "hSurface"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
856 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")]),
857]
858
859DXGI_FRAME_PRESENTATION_MODE = Enum("DXGI_FRAME_PRESENTATION_MODE", [
860 "DXGI_FRAME_PRESENTATION_MODE_COMPOSED",
861 "DXGI_FRAME_PRESENTATION_MODE_OVERLAY",
862 "DXGI_FRAME_PRESENTATION_MODE_NONE",
863])
864
865DXGI_FRAME_STATISTICS_MEDIA = Struct("DXGI_FRAME_STATISTICS_MEDIA", [
866 (UINT, "PresentCount"),
867 (UINT, "PresentRefreshCount"),
868 (UINT, "SyncRefreshCount"),
869 (LARGE_INTEGER, "SyncQPCTime"),
870 (LARGE_INTEGER, "SyncGPUTime"),
871 (DXGI_FRAME_PRESENTATION_MODE, "CompositionMode"),
872 (UINT, "ApprovedPresentDuration"),
873])
874
875IDXGISwapChainMedia = Interface("IDXGISwapChainMedia", IUnknown)
876IDXGISwapChainMedia.methods += [
877 StdMethod(HRESULT, "GetFrameStatisticsMedia", [Out(Pointer(DXGI_FRAME_STATISTICS_MEDIA), "pStats")], sideeffects=False),
878 StdMethod(HRESULT, "SetPresentDuration", [(UINT, "Duration")]),
879 StdMethod(HRESULT, "CheckPresentDurationSupport", [(UINT, "DesiredPresentDuration"), Out(Pointer(UINT), "pClosestSmallerPresentDuration"), Out(Pointer(UINT), "pClosestLargerPresentDuration")], sideeffects=False),
880]
881
882DXGI_OVERLAY_SUPPORT_FLAG = FakeEnum(UINT, [
883 "DXGI_OVERLAY_SUPPORT_FLAG_DIRECT",
884 "DXGI_OVERLAY_SUPPORT_FLAG_SCALING",
885])
886
887IDXGIOutput3 = Interface("IDXGIOutput3", IDXGIOutput2)
888IDXGIOutput3.methods += [
889 StdMethod(HRESULT, "CheckOverlaySupport", [(DXGI_FORMAT, "EnumFormat"), (ObjPointer(IUnknown), "pConcernedDevice"), Out(Pointer(DXGI_OVERLAY_SUPPORT_FLAG), "pFlags")], sideeffects=False),
890]
891
892dxgi.addInterfaces([
893 IDXGIDevice3,
894 IDXGISwapChain2,
895 IDXGISwapChainMedia,
896 IDXGIOutput3,
897 IDXGIFactory3,
898 IDXGIFactoryMedia,
899])
Jose Fonseca974e88e2015-08-14 16:01:03 +0100900
901
902
903#
904# Undocumented interfaces
905#
906
907IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown)
908IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject)
909
910IDXGIFactoryDWM.methods += [
911 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]),
912]
913
914# http://shchetinin.blogspot.co.uk/2012/04/dwm-graphics-directx-win8win7.html
915IDXGISwapChainDWM.methods += [
916 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
917 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
918 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
919 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
920 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
921 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
922 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
923 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
924]
925
926dxgi.addInterfaces([
927 IDXGIFactoryDWM,
928])
Jose Fonseca8e0e5422016-05-21 00:11:25 +0100929
930
931
932#
933# DXGI 1.4
934#
935
936DXGI_COLOR_SPACE_TYPE = Enum('DXGI_COLOR_SPACE_TYPE', [
937 'DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709',
938 'DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709',
939 'DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709',
940 'DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020',
941 'DXGI_COLOR_SPACE_RESERVED',
942 'DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601',
943 'DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601',
944 'DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601',
945 'DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709',
946 'DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709',
947 'DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020',
948 'DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020',
949 'DXGI_COLOR_SPACE_CUSTOM',
950])
951
952
953DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG = Enum('DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG', [
954 'DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT',
955 'DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT',
956])
957
958DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG = Enum('DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG', [
959 'DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT',
960])
961
962DXGI_MEMORY_SEGMENT_GROUP = Enum('DXGI_MEMORY_SEGMENT_GROUP', [
963 'DXGI_MEMORY_SEGMENT_GROUP_LOCAL',
964 'DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL',
965])
966
967DXGI_QUERY_VIDEO_MEMORY_INFO = Struct('DXGI_QUERY_VIDEO_MEMORY_INFO', [
968 (UINT64, 'Budget'),
969 (UINT64, 'CurrentUsage'),
970 (UINT64, 'AvailableForReservation'),
971 (UINT64, 'CurrentReservation'),
972])
973
974IDXGISwapChain3 = Interface('IDXGISwapChain3', IDXGISwapChain2)
975IDXGIOutput4 = Interface('IDXGIOutput4', IDXGIOutput3)
976IDXGIFactory4 = Interface('IDXGIFactory4', IDXGIFactory3)
977IDXGIAdapter3 = Interface('IDXGIAdapter3', IDXGIAdapter2)
978
979IDXGISwapChain3.methods += [
980 StdMethod(UINT, 'GetCurrentBackBufferIndex', []),
981 StdMethod(HRESULT, 'CheckColorSpaceSupport', [(DXGI_COLOR_SPACE_TYPE, 'ColorSpace'), Out(Pointer(UINT), 'pColorSpaceSupport')], sideeffects=False),
982 StdMethod(HRESULT, 'SetColorSpace1', [(DXGI_COLOR_SPACE_TYPE, 'ColorSpace')]),
983 StdMethod(HRESULT, 'ResizeBuffers1', [(UINT, 'BufferCount'), (UINT, 'Width'), (UINT, 'Height'), (DXGI_FORMAT, 'Format'), (DXGI_SWAP_CHAIN_FLAG, 'SwapChainFlags'), (Pointer(Const(UINT)), 'pCreationNodeMask'), (Array(Const(ObjPointer(IUnknown)), 'BufferCount'), 'ppPresentQueue')]),
984]
985
986IDXGIOutput4.methods += [
987 StdMethod(HRESULT, 'CheckOverlayColorSpaceSupport', [(DXGI_FORMAT, 'Format'), (DXGI_COLOR_SPACE_TYPE, 'ColorSpace'), (ObjPointer(IUnknown), 'pConcernedDevice'), Out(Pointer(UINT), 'pFlags')], sideeffects=False),
988]
989
990IDXGIFactory4.methods += [
991 StdMethod(HRESULT, 'EnumAdapterByLuid', [(LUID, 'AdapterLuid'), (REFIID, 'riid'), Out(Pointer(ObjPointer(Void)), 'ppvAdapter')]),
992 StdMethod(HRESULT, 'EnumWarpAdapter', [(REFIID, 'riid'), Out(Pointer(ObjPointer(Void)), 'ppvAdapter')]),
993]
994
995IDXGIAdapter3.methods += [
996 StdMethod(HRESULT, 'RegisterHardwareContentProtectionTeardownStatusEvent', [(HANDLE, 'hEvent'), Out(Pointer(DWORD), 'pdwCookie')], sideeffects=False),
997 StdMethod(Void, 'UnregisterHardwareContentProtectionTeardownStatus', [(DWORD, 'dwCookie')], sideeffects=False),
998 StdMethod(HRESULT, 'QueryVideoMemoryInfo', [(UINT, 'NodeIndex'), (DXGI_MEMORY_SEGMENT_GROUP, 'MemorySegmentGroup'), Out(Pointer(DXGI_QUERY_VIDEO_MEMORY_INFO), 'pVideoMemoryInfo')], sideeffects=False),
999 StdMethod(HRESULT, 'SetVideoMemoryReservation', [(UINT, 'NodeIndex'), (DXGI_MEMORY_SEGMENT_GROUP, 'MemorySegmentGroup'), (UINT64, 'Reservation')]),
1000 StdMethod(HRESULT, 'RegisterVideoMemoryBudgetChangeNotificationEvent', [(HANDLE, 'hEvent'), Out(Pointer(DWORD), 'pdwCookie')], sideeffects=False),
1001 StdMethod(Void, 'UnregisterVideoMemoryBudgetChangeNotification', [(DWORD, 'dwCookie')], sideeffects=False),
1002]
1003
1004dxgi.addInterfaces([
1005 IDXGISwapChain3,
1006 IDXGIOutput4,
1007 IDXGIFactory4,
1008 IDXGIAdapter3,
1009])
1010
Jose Fonseca55ae2842017-10-11 22:45:28 +01001011
1012#
1013# DXGI 1.5
1014#
1015
1016DXGI_HDR_METADATA_TYPE = Enum('DXGI_HDR_METADATA_TYPE', [
1017 'DXGI_HDR_METADATA_TYPE_NONE',
1018 'DXGI_HDR_METADATA_TYPE_HDR10',
1019])
1020
1021DXGI_HDR_METADATA_HDR10 = Struct('DXGI_HDR_METADATA_HDR10', [
1022 (Array(UINT16, 2), 'RedPrimary'),
1023 (Array(UINT16, 2), 'GreenPrimary'),
1024 (Array(UINT16, 2), 'BluePrimary'),
1025 (Array(UINT16, 2), 'WhitePoint'),
1026 (UINT, 'MaxMasteringLuminance'),
1027 (UINT, 'MinMasteringLuminance'),
1028 (UINT16, 'MaxContentLightLevel'),
1029 (UINT16, 'MaxFrameAverageLightLevel'),
1030])
1031
1032DXGI_OFFER_RESOURCE_FLAGS = FakeEnum(UINT, [
1033 'DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT',
1034])
1035
1036DXGI_RECLAIM_RESOURCE_RESULTS = Enum('DXGI_RECLAIM_RESOURCE_RESULTS', [
1037 'DXGI_RECLAIM_RESOURCE_RESULT_OK',
1038 'DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED',
1039 'DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED',
1040])
1041
1042DXGI_FEATURE, DXGI_FEATURE_DATA = EnumPolymorphic('DXGI_FEATURE', 'Feature', [
1043 ('DXGI_FEATURE_PRESENT_ALLOW_TEARING', Pointer(BOOL)),
1044], Blob(Void, "FeatureSupportDataSize"), False)
1045
1046IDXGIOutput5 = Interface('IDXGIOutput5', IDXGIOutput4)
1047IDXGISwapChain4 = Interface('IDXGISwapChain4', IDXGISwapChain3)
1048IDXGIDevice4 = Interface('IDXGIDevice4', IDXGIDevice3)
1049IDXGIFactory5 = Interface('IDXGIFactory5', IDXGIFactory4)
1050
1051IDXGIOutput5.methods += [
1052 StdMethod(HRESULT, 'DuplicateOutput1', [(ObjPointer(IUnknown), 'pDevice'), (UINT, 'Flags'), (UINT, 'SupportedFormatsCount'), (Array(Const(DXGI_FORMAT), 'SupportedFormatsCount'), 'pSupportedFormats'), Out(Pointer(ObjPointer(IDXGIOutputDuplication)), 'ppOutputDuplication')]),
1053]
1054
1055IDXGISwapChain4.methods += [
1056 StdMethod(HRESULT, 'SetHDRMetaData', [(DXGI_HDR_METADATA_TYPE, 'Type'), (UINT, 'Size'), (Blob(Void, 'Size'), 'pMetaData')]),
1057]
1058
1059IDXGIDevice4.methods += [
1060 StdMethod(HRESULT, 'OfferResources1', [(UINT, 'NumResources'), (Array(Const(ObjPointer(IDXGIResource)), 'NumResources'), 'ppResources'), (DXGI_OFFER_RESOURCE_PRIORITY, 'Priority'), (DXGI_OFFER_RESOURCE_FLAGS, 'Flags')]),
1061 StdMethod(HRESULT, 'ReclaimResources1', [(UINT, 'NumResources'), (Array(Const(ObjPointer(IDXGIResource)), 'NumResources'), 'ppResources'), Out(Array(DXGI_RECLAIM_RESOURCE_RESULTS, 'NumResources'), 'pResults')]),
1062]
1063
1064IDXGIFactory5.methods += [
1065 StdMethod(HRESULT, 'CheckFeatureSupport', [(DXGI_FEATURE, 'Feature'), Out(DXGI_FEATURE_DATA, 'pFeatureSupportData'), (UINT, 'FeatureSupportDataSize')], sideeffects=False),
1066]
1067
1068dxgi.addInterfaces([
1069 IDXGIOutput5,
1070 IDXGISwapChain4,
1071 IDXGIDevice4,
1072 IDXGIFactory5,
1073])
Jose Fonsecab155fa72020-05-21 09:16:48 +01001074
1075
1076#
1077# DXGI 1.6
1078#
1079
1080DXGI_ADAPTER_FLAG3 = Enum('DXGI_ADAPTER_FLAG3', [
1081 'DXGI_ADAPTER_FLAG3_NONE',
1082 'DXGI_ADAPTER_FLAG3_REMOTE',
1083 'DXGI_ADAPTER_FLAG3_SOFTWARE',
1084 'DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE',
1085 'DXGI_ADAPTER_FLAG3_FORCE_DWORD',
1086])
1087
1088DXGI_ADAPTER_DESC3 = Struct('DXGI_ADAPTER_DESC3', [
1089 (WString, 'Description'),
1090 (UINT, 'VendorId'),
1091 (UINT, 'DeviceId'),
1092 (UINT, 'SubSysId'),
1093 (UINT, 'Revision'),
1094 (SIZE_T, 'DedicatedVideoMemory'),
1095 (SIZE_T, 'DedicatedSystemMemory'),
1096 (SIZE_T, 'SharedSystemMemory'),
1097 (LUID, 'AdapterLuid'),
1098 (DXGI_ADAPTER_FLAG3, 'Flags'),
1099 (DXGI_GRAPHICS_PREEMPTION_GRANULARITY, 'GraphicsPreemptionGranularity'),
1100 (DXGI_COMPUTE_PREEMPTION_GRANULARITY, 'ComputePreemptionGranularity'),
1101])
1102
1103DXGI_OUTPUT_DESC1 = Struct('DXGI_OUTPUT_DESC1', [
1104 (WString, 'DeviceName'),
1105 (RECT, 'DesktopCoordinates'),
1106 (BOOL, 'AttachedToDesktop'),
1107 (DXGI_MODE_ROTATION, 'Rotation'),
1108 (HMONITOR, 'Monitor'),
1109 (UINT, 'BitsPerColor'),
1110 (DXGI_COLOR_SPACE_TYPE, 'ColorSpace'),
1111 (Array(FLOAT, 2), 'RedPrimary'),
1112 (Array(FLOAT, 2), 'GreenPrimary'),
1113 (Array(FLOAT, 2), 'BluePrimary'),
1114 (Array(FLOAT, 2), 'WhitePoint'),
1115 (FLOAT, 'MinLuminance'),
1116 (FLOAT, 'MaxLuminance'),
1117 (FLOAT, 'MaxFullFrameLuminance'),
1118])
1119
1120DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS = Flags(UINT, [
1121 'DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN',
1122 'DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED',
1123 'DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED',
1124])
1125
1126IDXGIAdapter4 = Interface('IDXGIAdapter4', IDXGIAdapter3)
1127IDXGIOutput6 = Interface('IDXGIOutput6', IDXGIOutput5)
1128
1129IDXGIAdapter4.methods += [
1130 StdMethod(HRESULT, 'GetDesc3', [Out(Pointer(DXGI_ADAPTER_DESC3), 'pDesc')], sideeffects=False),
1131]
1132
1133IDXGIOutput6.methods += [
1134 StdMethod(HRESULT, 'GetDesc1', [Out(Pointer(DXGI_OUTPUT_DESC1), 'pDesc')], sideeffects=False),
1135 StdMethod(HRESULT, 'CheckHardwareCompositionSupport', [Out(Pointer(DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS), 'pFlags')], sideeffects=False),
1136]
1137
1138dxgi.addInterfaces([
1139 IDXGIAdapter4,
1140 IDXGIOutput6,
1141])