blob: a9e6ec65e067cda262b3a6095cce499c17946b35 [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
José Fonsecaaf7d2312011-07-07 10:16:57 +010028from dxgitype import *
29
José Fonsecaca55d162012-04-16 13:05:47 +010030
31IDXGIObject = Interface("IDXGIObject", IUnknown)
32IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject)
33IDXGIResource = Interface("IDXGIResource", IDXGIDeviceSubObject)
34IDXGIKeyedMutex = Interface("IDXGIKeyedMutex", IDXGIDeviceSubObject)
35IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject)
36IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface)
37IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
38IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
39IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
40IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
41IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
42IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory)
43IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter)
44IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice)
45
46
47DXGI_USAGE = Flags(UINT, [
José Fonseca467a42a2012-05-04 11:49:19 +010048 "DXGI_CPU_ACCESS_NONE", # 0
49 "DXGI_CPU_ACCESS_SCRATCH", # 3
50 "DXGI_CPU_ACCESS_DYNAMIC", # 1
51 "DXGI_CPU_ACCESS_READ_WRITE", # 2
José Fonsecaca55d162012-04-16 13:05:47 +010052 "DXGI_USAGE_SHADER_INPUT",
53 "DXGI_USAGE_RENDER_TARGET_OUTPUT",
54 "DXGI_USAGE_BACK_BUFFER",
55 "DXGI_USAGE_SHARED",
56 "DXGI_USAGE_READ_ONLY",
57 "DXGI_USAGE_DISCARD_ON_PRESENT",
58 "DXGI_USAGE_UNORDERED_ACCESS",
José Fonsecaaf7d2312011-07-07 10:16:57 +010059])
60
José Fonsecaca55d162012-04-16 13:05:47 +010061DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [
62 (UINT, "PresentCount"),
63 (UINT, "PresentRefreshCount"),
64 (UINT, "SyncRefreshCount"),
65 (LARGE_INTEGER, "SyncQPCTime"),
66 (LARGE_INTEGER, "SyncGPUTime"),
67])
68
69DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [
70 (INT, "Pitch"),
José Fonsecafc047bb2013-05-29 19:28:03 +010071 (LinearPointer(BYTE, "_MappedSize"), "pBits"),
José Fonsecaca55d162012-04-16 13:05:47 +010072])
73
74DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [
75 (WString, "Description"),
76 (UINT, "VendorId"),
77 (UINT, "DeviceId"),
78 (UINT, "SubSysId"),
79 (UINT, "Revision"),
80 (SIZE_T, "DedicatedVideoMemory"),
81 (SIZE_T, "DedicatedSystemMemory"),
82 (SIZE_T, "SharedSystemMemory"),
83 (LUID, "AdapterLuid"),
84])
85
86DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [
87 (WString, "DeviceName"),
88 (RECT, "DesktopCoordinates"),
89 (BOOL, "AttachedToDesktop"),
90 (DXGI_MODE_ROTATION, "Rotation"),
91 (HMONITOR, "Monitor"),
92])
93
94DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [
95 (HANDLE, "Handle"),
96])
97
98DXGI_RESOURCE_PRIORITY = FakeEnum(UINT, [
99 "DXGI_RESOURCE_PRIORITY_MINIMUM",
100 "DXGI_RESOURCE_PRIORITY_LOW",
101 "DXGI_RESOURCE_PRIORITY_NORMAL",
102 "DXGI_RESOURCE_PRIORITY_HIGH",
103 "DXGI_RESOURCE_PRIORITY_MAXIMUM",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100104])
105
106DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [
107 "DXGI_RESIDENCY_FULLY_RESIDENT",
108 "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY",
109 "DXGI_RESIDENCY_EVICTED_TO_DISK",
110])
111
112DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [
113 (UINT, "Width"),
114 (UINT, "Height"),
115 (DXGI_FORMAT, "Format"),
116 (DXGI_SAMPLE_DESC, "SampleDesc"),
117])
118
José Fonsecaca55d162012-04-16 13:05:47 +0100119DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [
120 "DXGI_SWAP_EFFECT_DISCARD",
121 "DXGI_SWAP_EFFECT_SEQUENTIAL",
José Fonsecaaf7d2312011-07-07 10:16:57 +0100122])
123
José Fonsecaca55d162012-04-16 13:05:47 +0100124DXGI_SWAP_CHAIN_FLAG = Flags(UINT, [
José Fonsecaaf7d2312011-07-07 10:16:57 +0100125 "DXGI_SWAP_CHAIN_FLAG_NONPREROTATED",
126 "DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH",
127 "DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE",
128])
129
130DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [
131 (DXGI_MODE_DESC, "BufferDesc"),
132 (DXGI_SAMPLE_DESC, "SampleDesc"),
133 (DXGI_USAGE, "BufferUsage"),
134 (UINT, "BufferCount"),
135 (HWND, "OutputWindow"),
136 (BOOL, "Windowed"),
137 (DXGI_SWAP_EFFECT, "SwapEffect"),
José Fonsecaca55d162012-04-16 13:05:47 +0100138 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
139])
140
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500141
José Fonsecaca55d162012-04-16 13:05:47 +0100142IDXGIObject.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100143 StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False),
144 StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False),
145 StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), Out(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100146 StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]),
147]
148
149IDXGIDeviceSubObject.methods += [
150 StdMethod(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppDevice")]),
151]
152
153IDXGIResource.methods += [
154 StdMethod(HRESULT, "GetSharedHandle", [Out(Pointer(HANDLE), "pSharedHandle")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100155 StdMethod(HRESULT, "GetUsage", [Out(Pointer(DXGI_USAGE), "pUsage")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100156 StdMethod(HRESULT, "SetEvictionPriority", [(DXGI_RESOURCE_PRIORITY, "EvictionPriority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100157 StdMethod(HRESULT, "GetEvictionPriority", [Out(Pointer(DXGI_RESOURCE_PRIORITY), "pEvictionPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100158]
159
160IDXGIKeyedMutex.methods += [
161 StdMethod(HRESULT, "AcquireSync", [(UINT64, "Key"), (DWORD, "dwMilliseconds")]),
162 StdMethod(HRESULT, "ReleaseSync", [(UINT64, "Key")]),
163]
164
165DXGI_MAP = Flags(UINT, [
166 "DXGI_MAP_READ",
167 "DXGI_MAP_WRITE",
168 "DXGI_MAP_DISCARD",
169])
170
171IDXGISurface.methods += [
José Fonseca3f174372012-05-08 12:09:42 +0100172 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "pDesc")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100173 StdMethod(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect"), (DXGI_MAP, "MapFlags")]),
174 StdMethod(HRESULT, "Unmap", []),
175]
176
177IDXGISurface1.methods += [
178 StdMethod(HRESULT, "GetDC", [(BOOL, "Discard"), Out(Pointer(HDC), "phdc")]),
179 StdMethod(HRESULT, "ReleaseDC", [(Pointer(RECT), "pDirtyRect")]),
180]
181
182IDXGIAdapter.methods += [
183 StdMethod(HRESULT, "EnumOutputs", [(UINT, "Output"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100184 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "pDesc")], sideeffects=False),
185 StdMethod(HRESULT, "CheckInterfaceSupport", [(REFGUID, "InterfaceName"), Out(Pointer(LARGE_INTEGER), "pUMDVersion")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100186]
187
188DXGI_ENUM_MODES = Flags(UINT, [
189 "DXGI_ENUM_MODES_INTERLACED",
190 "DXGI_ENUM_MODES_SCALING",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100191 "DXGI_ENUM_MODES_STEREO",
192 "DXGI_ENUM_MODES_DISABLED_STEREO",
José Fonsecaca55d162012-04-16 13:05:47 +0100193])
194
195IDXGIOutput.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100196 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "pDesc")], sideeffects=False),
197 StdMethod(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), Out(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC, "*pNumModes"), "pDesc")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100198 StdMethod(HRESULT, "FindClosestMatchingMode", [(Pointer(Const(DXGI_MODE_DESC)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")]),
199 StdMethod(HRESULT, "WaitForVBlank", []),
200 StdMethod(HRESULT, "TakeOwnership", [(ObjPointer(IUnknown), "pDevice"), (BOOL, "Exclusive")]),
201 StdMethod(Void, "ReleaseOwnership", []),
José Fonseca28829ec2014-08-19 20:41:41 +0100202 StdMethod(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "pGammaCaps")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100203 StdMethod(HRESULT, "SetGammaControl", [(Pointer(Const(DXGI_GAMMA_CONTROL)), "pArray")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100204 StdMethod(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "pArray")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100205 StdMethod(HRESULT, "SetDisplaySurface", [(ObjPointer(IDXGISurface), "pScanoutSurface")]),
206 StdMethod(HRESULT, "GetDisplaySurfaceData", [(ObjPointer(IDXGISurface), "pDestination")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100207 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100208]
209
210DXGI_PRESENT = Flags(UINT, [
211 "DXGI_PRESENT_TEST",
212 "DXGI_PRESENT_DO_NOT_SEQUENCE",
213 "DXGI_PRESENT_RESTART",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100214 "DXGI_PRESENT_DO_NOT_WAIT",
215 "DXGI_PRESENT_STEREO_PREFER_RIGHT",
216 "DXGI_PRESENT_STEREO_TEMPORARY_MONO",
217 "DXGI_PRESENT_RESTRICT_TO_OUTPUT",
218 "DXGI_PRESENT_USE_DURATION",
José Fonsecaca55d162012-04-16 13:05:47 +0100219])
220
221IDXGISwapChain.methods += [
222 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
223 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
224 StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
225 StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100226 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
José Fonsecaf450d8b2012-11-20 14:48:31 +0000227 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
José Fonsecaca55d162012-04-16 13:05:47 +0100228 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
229 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100230 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
231 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100232]
233
234DXGI_MWA = Flags(UINT, [
235 "DXGI_MWA_NO_WINDOW_CHANGES",
236 "DXGI_MWA_NO_ALT_ENTER",
237 "DXGI_MWA_NO_PRINT_SCREEN",
238 "DXGI_MWA_VALID",
239])
240
241IDXGIFactory.methods += [
242 StdMethod(HRESULT, "EnumAdapters", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
243 StdMethod(HRESULT, "MakeWindowAssociation", [(HWND, "WindowHandle"), (DXGI_MWA, "Flags")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100244 StdMethod(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "pWindowHandle")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100245 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]),
246 StdMethod(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "Module"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
247]
248
249IDXGIDevice.methods += [
250 StdMethod(HRESULT, "GetAdapter", [Out(Pointer(ObjPointer(IDXGIAdapter)), "pAdapter")]),
251 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 +0100252 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 +0100253 StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100254 StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False),
José Fonsecaca55d162012-04-16 13:05:47 +0100255]
256
José Fonsecafd9d01d2014-09-03 22:08:30 +0100257DXGI_ADAPTER_FLAG = FakeEnum(UINT, [
José Fonsecaca55d162012-04-16 13:05:47 +0100258 "DXGI_ADAPTER_FLAG_NONE",
259 "DXGI_ADAPTER_FLAG_REMOTE",
José Fonsecafd9d01d2014-09-03 22:08:30 +0100260 "DXGI_ADAPTER_FLAG_SOFTWARE",
José Fonsecaca55d162012-04-16 13:05:47 +0100261])
262
263DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [
264 (WString, "Description"),
265 (UINT, "VendorId"),
266 (UINT, "DeviceId"),
267 (UINT, "SubSysId"),
268 (UINT, "Revision"),
269 (SIZE_T, "DedicatedVideoMemory"),
270 (SIZE_T, "DedicatedSystemMemory"),
271 (SIZE_T, "SharedSystemMemory"),
272 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100273 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100274])
275
José Fonsecaca55d162012-04-16 13:05:47 +0100276DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [
277 (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"),
278 (Array(Array(FLOAT, 16), 2), "WhitePoints"),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100279])
280
José Fonsecaca55d162012-04-16 13:05:47 +0100281IDXGIFactory1.methods += [
282 StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]),
283 StdMethod(BOOL, "IsCurrent", []),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100284]
285
José Fonsecaca55d162012-04-16 13:05:47 +0100286IDXGIAdapter1.methods += [
José Fonseca45fff9c2012-05-08 09:07:27 +0100287 StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100288]
289
José Fonsecaca55d162012-04-16 13:05:47 +0100290IDXGIDevice1.methods += [
291 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
José Fonseca45fff9c2012-05-08 09:07:27 +0100292 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
José Fonsecaaf7d2312011-07-07 10:16:57 +0100293]
294
José Fonsecaf450d8b2012-11-20 14:48:31 +0000295
296IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown)
297IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject)
298
299IDXGIFactoryDWM.methods += [
300 StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]),
301]
302
José Fonsecab2f773d2014-02-28 14:46:23 +0000303# http://shchetinin.blogspot.co.uk/2012/04/dwm-graphics-directx-win8win7.html
José Fonsecaf450d8b2012-11-20 14:48:31 +0000304IDXGISwapChainDWM.methods += [
305 StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
306 StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
307 StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
308 StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
309 StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
310 StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
José Fonsecab2f773d2014-02-28 14:46:23 +0000311 StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
312 StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
José Fonsecaf450d8b2012-11-20 14:48:31 +0000313]
314
José Fonsecafd9d01d2014-09-03 22:08:30 +0100315
316dxgi = Module('dxgi')
317dxgi.addInterfaces([
318 IDXGIKeyedMutex,
319 IDXGIFactory1,
320 IDXGIFactoryDWM,
321 IDXGIDevice1,
322 IDXGIAdapter1,
323 IDXGIResource,
324])
325dxgi.addFunctions([
326 StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
327 StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
328])
329
330
331
332#
333# DXGI 1.2
334#
335
336IDXGIDisplayControl = Interface("IDXGIDisplayControl", IUnknown)
337IDXGIDisplayControl.methods += [
338 StdMethod(BOOL, "IsStereoEnabled", [], sideeffects=False),
339 StdMethod(Void, "SetStereoEnabled", [(BOOL, "enabled")]),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500340]
341
José Fonsecafd9d01d2014-09-03 22:08:30 +0100342DXGI_OUTDUPL_MOVE_RECT = Struct("DXGI_OUTDUPL_MOVE_RECT", [
343 (POINT, "SourcePoint"),
344 (RECT, "DestinationRect"),
345])
346
347DXGI_OUTDUPL_DESC = Struct("DXGI_OUTDUPL_DESC", [
348 (DXGI_MODE_DESC, "ModeDesc"),
349 (DXGI_MODE_ROTATION, "Rotation"),
350 (BOOL, "DesktopImageInSystemMemory"),
351])
352
353DXGI_OUTDUPL_POINTER_POSITION = Struct("DXGI_OUTDUPL_POINTER_POSITION", [
354 (POINT, "Position"),
355 (BOOL, "Visible"),
356])
357
358DXGI_OUTDUPL_POINTER_SHAPE_TYPE = Enum("DXGI_OUTDUPL_POINTER_SHAPE_TYPE", [
359 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME",
360 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR",
361 "DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR",
362])
363
364DXGI_OUTDUPL_POINTER_SHAPE_INFO = Struct("DXGI_OUTDUPL_POINTER_SHAPE_INFO", [
365 (UINT, "Type"),
366 (UINT, "Width"),
367 (UINT, "Height"),
368 (UINT, "Pitch"),
369 (POINT, "HotSpot"),
370])
371
372DXGI_OUTDUPL_FRAME_INFO = Struct("DXGI_OUTDUPL_FRAME_INFO", [
373 (LARGE_INTEGER, "LastPresentTime"),
374 (LARGE_INTEGER, "LastMouseUpdateTime"),
375 (UINT, "AccumulatedFrames"),
376 (BOOL, "RectsCoalesced"),
377 (BOOL, "ProtectedContentMaskedOut"),
378 (DXGI_OUTDUPL_POINTER_POSITION, "PointerPosition"),
379 (UINT, "TotalMetadataBufferSize"),
380 (UINT, "PointerShapeBufferSize"),
381])
382
383IDXGIOutputDuplication = Interface("IDXGIOutputDuplication", IDXGIObject)
384IDXGIOutputDuplication.methods += [
385 StdMethod(Void, "GetDesc", [Out(Pointer(DXGI_OUTDUPL_DESC), "pDesc")], sideeffects=False),
386 StdMethod(HRESULT, "AcquireNextFrame", [(UINT, "TimeoutInMilliseconds"), Out(Pointer(DXGI_OUTDUPL_FRAME_INFO), "pFrameInfo"), Out(Pointer(ObjPointer(IDXGIResource)), "ppDesktopResource")]),
387 StdMethod(HRESULT, "GetFrameDirtyRects", [(UINT, "DirtyRectsBufferSize"), Out(Array(RECT, "DirtyRectsBufferSize"), "pDirtyRectsBuffer"), Out(Pointer(UINT), "pDirtyRectsBufferSizeRequired")], sideeffects=False),
388 StdMethod(HRESULT, "GetFrameMoveRects", [(UINT, "MoveRectsBufferSize"), Out(Array(DXGI_OUTDUPL_MOVE_RECT, "MoveRectsBufferSize"), "pMoveRectBuffer"), Out(Pointer(UINT), "pMoveRectsBufferSizeRequired")], sideeffects=False),
389 StdMethod(HRESULT, "GetFramePointerShape", [(UINT, "PointerShapeBufferSize"), Out(OpaqueBlob(Void, "PointerShapeBufferSize"), "pPointerShapeBuffer"), Out(Pointer(UINT), "pPointerShapeBufferSizeRequired"), Out(Pointer(DXGI_OUTDUPL_POINTER_SHAPE_INFO), "pPointerShapeInfo")], sideeffects=False),
390 StdMethod(HRESULT, "MapDesktopSurface", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect")], sideeffects=False),
391 StdMethod(HRESULT, "UnMapDesktopSurface", [], sideeffects=False),
392 StdMethod(HRESULT, "ReleaseFrame", []),
393]
394
395DXGI_ALPHA_MODE = Enum("DXGI_ALPHA_MODE", [
396 "DXGI_ALPHA_MODE_UNSPECIFIED",
397 "DXGI_ALPHA_MODE_PREMULTIPLIED",
398 "DXGI_ALPHA_MODE_STRAIGHT",
399 "DXGI_ALPHA_MODE_IGNORE",
400])
401
402IDXGISurface2 = Interface("IDXGISurface2", IDXGISurface1)
403IDXGISurface2.methods += [
404 StdMethod(HRESULT, "GetResource", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParentResource"), Out(Pointer(UINT), "pSubresourceIndex")]),
405]
406
407DXGI_SHARED_RESOURCE_FLAG = Flags(DWORD, [
408 "DXGI_SHARED_RESOURCE_READ",
409 "DXGI_SHARED_RESOURCE_WRITE",
410])
411
412IDXGIResource1 = Interface("IDXGIResource1", IDXGIResource)
413IDXGIResource1.methods += [
414 StdMethod(HRESULT, "CreateSubresourceSurface", [(UINT, "index"), Out(Pointer(ObjPointer(IDXGISurface2)), "ppSurface")]),
415 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 -0500416]
417
418DXGI_OFFER_RESOURCE_PRIORITY = Enum("DXGI_OFFER_RESOURCE_PRIORITY", [
419 "DXGI_OFFER_RESOURCE_PRIORITY_LOW",
420 "DXGI_OFFER_RESOURCE_PRIORITY_NORMAL",
421 "DXGI_OFFER_RESOURCE_PRIORITY_HIGH",
422])
423
José Fonsecafd9d01d2014-09-03 22:08:30 +0100424IDXGIDevice2 = Interface("IDXGIDevice2", IDXGIDevice1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500425IDXGIDevice2.methods += [
426 StdMethod(HRESULT, "OfferResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), (DXGI_OFFER_RESOURCE_PRIORITY, "Priority")]),
427 StdMethod(HRESULT, "ReclaimResources", [(UINT, "NumResources"), (Array(Const(ObjPointer(IDXGIResource)), "NumResources"), "ppResources"), Out(Pointer(BOOL), "pDiscarded")]),
428 StdMethod(HRESULT, "EnqueueSetEvent", [(HANDLE, "hEvent")]),
429]
430
José Fonsecafd9d01d2014-09-03 22:08:30 +0100431DXGI_MODE_DESC1 = Struct("DXGI_MODE_DESC1", [
432 (UINT, "Width"),
433 (UINT, "Height"),
434 (DXGI_RATIONAL, "RefreshRate"),
435 (DXGI_FORMAT, "Format"),
436 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
437 (DXGI_MODE_SCALING, "Scaling"),
438 (BOOL, "Stereo"),
439])
440
441DXGI_SCALING = Enum("DXGI_SCALING", [
442 "DXGI_SCALING_STRETCH",
443 "DXGI_SCALING_NONE",
444 "DXGI_SCALING_ASPECT_RATIO_STRETCH",
445])
446
447DXGI_SWAP_CHAIN_DESC1 = Struct("DXGI_SWAP_CHAIN_DESC1", [
448 (UINT, "Width"),
449 (UINT, "Height"),
450 (DXGI_FORMAT, "Format"),
451 (BOOL, "Stereo"),
452 (DXGI_SAMPLE_DESC, "SampleDesc"),
453 (DXGI_USAGE, "BufferUsage"),
454 (UINT, "BufferCount"),
455 (DXGI_SCALING, "Scaling"),
456 (DXGI_SWAP_EFFECT, "SwapEffect"),
457 (DXGI_ALPHA_MODE, "AlphaMode"),
458 (DXGI_SWAP_CHAIN_FLAG, "Flags"),
459])
460
461DXGI_SWAP_CHAIN_FULLSCREEN_DESC = Struct("DXGI_SWAP_CHAIN_FULLSCREEN_DESC", [
462 (DXGI_RATIONAL, "RefreshRate"),
463 (DXGI_MODE_SCANLINE_ORDER, "ScanlineOrdering"),
464 (DXGI_MODE_SCALING, "Scaling"),
465 (BOOL, "Windowed"),
466])
467
468DXGI_PRESENT_PARAMETERS = Struct("DXGI_PRESENT_PARAMETERS", [
469 (UINT, "DirtyRectsCount"),
470 (Array(RECT, "{self}.DirtyRectsCount"), "pDirtyRects"),
471 (Pointer(RECT), "pScrollRect"),
472 (Pointer(POINT), "pScrollOffset"),
473])
474
475IDXGISwapChain1 = Interface("IDXGISwapChain1", IDXGISwapChain)
476IDXGISwapChain1.methods += [
477 StdMethod(HRESULT, "GetDesc1", [(Out(Pointer(DXGI_SWAP_CHAIN_DESC1), "pDesc"))], sideeffects=False),
478 StdMethod(HRESULT, "GetFullscreenDesc", [(Out(Pointer(DXGI_SWAP_CHAIN_FULLSCREEN_DESC), "pDesc"))], sideeffects=False),
479 StdMethod(HRESULT, "GetHwnd", [(Out(Pointer(HWND), "pHwnd"))], sideeffects=False),
480 StdMethod(HRESULT, "GetCoreWindow", [(REFIID, "riid"), (Out(Pointer(ObjPointer(Void)), "ppUnk"))]),
481 StdMethod(HRESULT, "Present1", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags"), (Pointer(Const(DXGI_PRESENT_PARAMETERS)), "pPresentParameters")]),
482 StdMethod(BOOL, "IsTemporaryMonoSupported", [], sideeffects=False),
483 StdMethod(HRESULT, "GetRestrictToOutput", [(Out(Pointer(ObjPointer(IDXGIOutput)), "ppRestrictToOutput"))]),
484 StdMethod(HRESULT, "SetBackgroundColor", [(Pointer(Const(DXGI_RGBA)), "pColor")]),
485 StdMethod(HRESULT, "GetBackgroundColor", [(Out(Pointer(DXGI_RGBA), "pColor"))], sideeffects=False),
486 StdMethod(HRESULT, "SetRotation", [(DXGI_MODE_ROTATION, "Rotation")]),
487 StdMethod(HRESULT, "GetRotation", [(Out(Pointer(DXGI_MODE_ROTATION), "pRotation"))], sideeffects=False),
488]
489
490IDXGIFactory2 = Interface("IDXGIFactory2", IDXGIFactory1)
491IDXGIFactory2.methods += [
492 StdMethod(BOOL, "IsWindowedStereoEnabled", [], sideeffects=False),
493 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")]),
494 StdMethod(HRESULT, "CreateSwapChainForCoreWindow", [(ObjPointer(IUnknown), "pDevice"), (ObjPointer(IUnknown), "pWindow"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
495 StdMethod(HRESULT, "GetSharedResourceAdapterLuid", [(HANDLE, "hResource"), Out(Pointer(LUID), "pLuid")], sideeffects=False),
José Fonseca40a9fe42014-09-17 19:04:55 +0100496 StdMethod(HRESULT, "RegisterStereoStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
497 StdMethod(HRESULT, "RegisterStereoStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
498 StdMethod(Void, "UnregisterStereoStatus", [(DWORD, "dwCookie")], sideeffects=False),
499 StdMethod(HRESULT, "RegisterOcclusionStatusWindow", [(HWND, "WindowHandle"), (UINT, "wMsg"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
500 StdMethod(HRESULT, "RegisterOcclusionStatusEvent", [(HANDLE, "hEvent"), Out(Pointer(DWORD), "pdwCookie")], sideeffects=False),
501 StdMethod(Void, "UnregisterOcclusionStatus", [(DWORD, "dwCookie")], sideeffects=False),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100502 StdMethod(HRESULT, "CreateSwapChainForComposition", [(ObjPointer(IUnknown), "pDevice"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
503]
504
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500505DXGI_GRAPHICS_PREEMPTION_GRANULARITY = Enum("DXGI_GRAPHICS_PREEMPTION_GRANULARITY", [
506 "DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY",
507 "DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY",
508 "DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY",
509 "DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY",
510 "DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY",
511])
512
513DXGI_COMPUTE_PREEMPTION_GRANULARITY = Enum("DXGI_COMPUTE_PREEMPTION_GRANULARITY", [
514 "DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY",
515 "DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY",
516 "DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY",
517 "DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY",
518 "DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY",
519])
520
521DXGI_ADAPTER_DESC2 = Struct("DXGI_ADAPTER_DESC2", [
522 (WString, "Description"),
523 (UINT, "VendorId"),
524 (UINT, "DeviceId"),
525 (UINT, "SubSysId"),
526 (UINT, "Revision"),
527 (SIZE_T, "DedicatedVideoMemory"),
528 (SIZE_T, "DedicatedSystemMemory"),
529 (SIZE_T, "SharedSystemMemory"),
530 (LUID, "AdapterLuid"),
José Fonsecafd9d01d2014-09-03 22:08:30 +0100531 (DXGI_ADAPTER_FLAG, "Flags"),
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500532 (DXGI_GRAPHICS_PREEMPTION_GRANULARITY, "GraphicsPreemptionGranularity"),
533 (DXGI_COMPUTE_PREEMPTION_GRANULARITY, "ComputePreemptionGranularity"),
534])
535
José Fonsecafd9d01d2014-09-03 22:08:30 +0100536IDXGIAdapter2 = Interface("IDXGIAdapter2", IDXGIAdapter1)
Jeff Muizelaar4d57f312013-11-19 15:18:31 -0500537IDXGIAdapter2.methods += [
538 StdMethod(HRESULT, "GetDesc2", [Out(Pointer(DXGI_ADAPTER_DESC2), "pDesc")], sideeffects=False),
539]
José Fonsecaf450d8b2012-11-20 14:48:31 +0000540
José Fonsecafd9d01d2014-09-03 22:08:30 +0100541IDXGIOutput1 = Interface("IDXGIOutput1", IDXGIOutput)
542IDXGIOutput1.methods += [
543 StdMethod(HRESULT, "GetDisplayModeList1", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), Out(Pointer(UINT), "pNumModes"), Out(Pointer(DXGI_MODE_DESC1), "pDesc")]),
544 StdMethod(HRESULT, "FindClosestMatchingMode1", [(Pointer(Const(DXGI_MODE_DESC1)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC1), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")]),
545 StdMethod(HRESULT, "GetDisplaySurfaceData1", [(ObjPointer(IDXGIResource), "pDestination")]),
546 StdMethod(HRESULT, "DuplicateOutput", [(ObjPointer(IUnknown), "pDevice"), Out(Pointer(ObjPointer(IDXGIOutputDuplication)), "ppOutputDuplication")]),
José Fonseca2f439632014-08-27 14:15:44 +0100547]
548
José Fonsecacdefc482012-11-16 20:06:20 +0000549dxgi.addInterfaces([
José Fonseca818d9f02014-09-14 19:41:31 +0100550 IDXGIDisplayControl,
José Fonseca2f439632014-08-27 14:15:44 +0100551 IDXGIDevice2,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100552 IDXGISwapChain1,
553 IDXGIFactory2,
José Fonseca2f439632014-08-27 14:15:44 +0100554 IDXGIResource1,
José Fonsecafd9d01d2014-09-03 22:08:30 +0100555 IDXGIAdapter2,
556 IDXGIOutput1,
José Fonsecaca55d162012-04-16 13:05:47 +0100557])
José Fonseca51a7bde2014-09-03 22:26:21 +0100558
559#
560# DXGI 1.3
561#
562
563DXGI_CREATE_FACTORY_FLAGS = Flags(UINT, [
564 "DXGI_CREATE_FACTORY_DEBUG",
565])
566
567dxgi.addFunctions([
568 StdFunction(HRESULT, "CreateDXGIFactory2", [(DXGI_CREATE_FACTORY_FLAGS, "Flags"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
569])
570
571IDXGIDevice3 = Interface("IDXGIDevice3", IDXGIDevice2)
572IDXGIDevice3.methods += [
573 StdMethod(Void, "Trim", []),
574]
575
576DXGI_MATRIX_3X2_F = Struct("DXGI_MATRIX_3X2_F", [
577 (FLOAT, "_11"),
578 (FLOAT, "_12"),
579 (FLOAT, "_21"),
580 (FLOAT, "_22"),
581 (FLOAT, "_31"),
582 (FLOAT, "_32"),
583])
584
585IDXGISwapChain2 = Interface("IDXGISwapChain2", IDXGISwapChain1)
586IDXGISwapChain2.methods += [
587 StdMethod(HRESULT, "SetSourceSize", [(UINT, "Width"), (UINT, "Height")]),
588 StdMethod(HRESULT, "GetSourceSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
589 StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
590 StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
591 StdMethod(HANDLE, "GetFrameLatencyWaitableObject", [], sideeffects=False),
592 StdMethod(HRESULT, "SetMatrixTransform", [(Pointer(Const(DXGI_MATRIX_3X2_F)), "pMatrix")]),
593 StdMethod(HRESULT, "GetMatrixTransform", [Out(Pointer(DXGI_MATRIX_3X2_F), "pMatrix")], sideeffects=False),
594]
595
596IDXGIOutput2 = Interface("IDXGIOutput2", IDXGIOutput1)
597IDXGIOutput2.methods += [
598 StdMethod(BOOL, "SupportsOverlays", [], sideeffects=False),
599]
600
601IDXGIFactory3 = Interface("IDXGIFactory3", IDXGIFactory2)
602IDXGIFactory3.methods += [
603 StdMethod(DXGI_CREATE_FACTORY_FLAGS, "GetCreationFlags", [], sideeffects=False),
604]
605
606DXGI_DECODE_SWAP_CHAIN_DESC = Struct("DXGI_DECODE_SWAP_CHAIN_DESC", [
607 (UINT, "Flags"),
608])
609
610# XXX: Flags
611DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS = Enum("DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS", [
612 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE",
613 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709",
614 "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC",
615])
616
617IDXGIDecodeSwapChain = Interface("IDXGIDecodeSwapChain", IUnknown)
618IDXGIDecodeSwapChain.methods += [
619 StdMethod(HRESULT, "PresentBuffer", [(UINT, "BufferToPresent"), (UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
620 StdMethod(HRESULT, "SetSourceRect", [(Pointer(Const(RECT)), "pRect")]),
621 StdMethod(HRESULT, "SetTargetRect", [(Pointer(Const(RECT)), "pRect")]),
622 StdMethod(HRESULT, "SetDestSize", [(UINT, "Width"), (UINT, "Height")]),
623 StdMethod(HRESULT, "GetSourceRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
624 StdMethod(HRESULT, "GetTargetRect", [Out(Pointer(RECT), "pRect")], sideeffects=False),
625 StdMethod(HRESULT, "GetDestSize", [Out(Pointer(UINT), "pWidth"), Out(Pointer(UINT), "pHeight")], sideeffects=False),
626 StdMethod(HRESULT, "SetColorSpace", [(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "ColorSpace")]),
627 StdMethod(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS, "GetColorSpace", [], sideeffects=False),
628]
629
630IDXGIFactoryMedia = Interface("IDXGIFactoryMedia", IUnknown)
631IDXGIFactoryMedia.methods += [
632 StdMethod(HRESULT, "CreateSwapChainForCompositionSurfaceHandle", [(ObjPointer(IUnknown), "pDevice"), (HANDLE, "hSurface"), (Pointer(Const(DXGI_SWAP_CHAIN_DESC1)), "pDesc"), (ObjPointer(IDXGIOutput), "pRestrictToOutput"), Out(Pointer(ObjPointer(IDXGISwapChain1)), "ppSwapChain")]),
633 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")]),
634]
635
636DXGI_FRAME_PRESENTATION_MODE = Enum("DXGI_FRAME_PRESENTATION_MODE", [
637 "DXGI_FRAME_PRESENTATION_MODE_COMPOSED",
638 "DXGI_FRAME_PRESENTATION_MODE_OVERLAY",
639 "DXGI_FRAME_PRESENTATION_MODE_NONE",
640])
641
642DXGI_FRAME_STATISTICS_MEDIA = Struct("DXGI_FRAME_STATISTICS_MEDIA", [
643 (UINT, "PresentCount"),
644 (UINT, "PresentRefreshCount"),
645 (UINT, "SyncRefreshCount"),
646 (LARGE_INTEGER, "SyncQPCTime"),
647 (LARGE_INTEGER, "SyncGPUTime"),
648 (DXGI_FRAME_PRESENTATION_MODE, "CompositionMode"),
649 (UINT, "ApprovedPresentDuration"),
650])
651
652IDXGISwapChainMedia = Interface("IDXGISwapChainMedia", IUnknown)
653IDXGISwapChainMedia.methods += [
654 StdMethod(HRESULT, "GetFrameStatisticsMedia", [Out(Pointer(DXGI_FRAME_STATISTICS_MEDIA), "pStats")], sideeffects=False),
655 StdMethod(HRESULT, "SetPresentDuration", [(UINT, "Duration")]),
656 StdMethod(HRESULT, "CheckPresentDurationSupport", [(UINT, "DesiredPresentDuration"), Out(Pointer(UINT), "pClosestSmallerPresentDuration"), Out(Pointer(UINT), "pClosestLargerPresentDuration")], sideeffects=False),
657]
658
659DXGI_OVERLAY_SUPPORT_FLAG = FakeEnum(UINT, [
660 "DXGI_OVERLAY_SUPPORT_FLAG_DIRECT",
661 "DXGI_OVERLAY_SUPPORT_FLAG_SCALING",
662])
663
664IDXGIOutput3 = Interface("IDXGIOutput3", IDXGIOutput2)
665IDXGIOutput3.methods += [
666 StdMethod(HRESULT, "CheckOverlaySupport", [(DXGI_FORMAT, "EnumFormat"), (ObjPointer(IUnknown), "pConcernedDevice"), Out(Pointer(DXGI_OVERLAY_SUPPORT_FLAG), "pFlags")], sideeffects=False),
667]
668
669dxgi.addInterfaces([
670 IDXGIDevice3,
671 IDXGISwapChain2,
672 IDXGISwapChainMedia,
673 IDXGIOutput3,
674 IDXGIFactory3,
675 IDXGIFactoryMedia,
676])