]> git.cworth.org Git - apitrace/blob - specs/dxgi.py
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / specs / dxgi.py
1 ##########################################################################
2 #
3 # Copyright 2011 Jose Fonseca
4 # All Rights Reserved.
5 #
6 # Permission is hereby granted, free of charge, to any person obtaining a copy
7 # of this software and associated documentation files (the "Software"), to deal
8 # in the Software without restriction, including without limitation the rights
9 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 # copies of the Software, and to permit persons to whom the Software is
11 # furnished to do so, subject to the following conditions:
12 #
13 # The above copyright notice and this permission notice shall be included in
14 # all copies or substantial portions of the Software.
15 #
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 # THE SOFTWARE.
23 #
24 ##########################################################################/
25
26
27 from dxgitype import *
28
29
30 IDXGIObject = Interface("IDXGIObject", IUnknown)
31 IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject)
32 IDXGIResource = Interface("IDXGIResource", IDXGIDeviceSubObject)
33 IDXGIKeyedMutex = Interface("IDXGIKeyedMutex", IDXGIDeviceSubObject)
34 IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject)
35 IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface)
36 IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
37 IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
38 IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
39 IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
40 IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
41 IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory)
42 IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter)
43 IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice)
44
45
46 DXGI_USAGE = Flags(UINT, [
47     "DXGI_CPU_ACCESS_NONE", # 0
48     "DXGI_CPU_ACCESS_SCRATCH", # 3
49     "DXGI_CPU_ACCESS_DYNAMIC", # 1
50     "DXGI_CPU_ACCESS_READ_WRITE", # 2
51     "DXGI_USAGE_SHADER_INPUT",
52     "DXGI_USAGE_RENDER_TARGET_OUTPUT",
53     "DXGI_USAGE_BACK_BUFFER",
54     "DXGI_USAGE_SHARED",
55     "DXGI_USAGE_READ_ONLY",
56     "DXGI_USAGE_DISCARD_ON_PRESENT",
57     "DXGI_USAGE_UNORDERED_ACCESS",
58 ])
59
60 DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [
61     (UINT, "PresentCount"),
62     (UINT, "PresentRefreshCount"),
63     (UINT, "SyncRefreshCount"),
64     (LARGE_INTEGER, "SyncQPCTime"),
65     (LARGE_INTEGER, "SyncGPUTime"),
66 ])
67
68 DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [
69     (INT, "Pitch"),
70     (OpaquePointer(BYTE), "pBits"),
71 ])
72
73 DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [
74     (WString, "Description"),
75     (UINT, "VendorId"),
76     (UINT, "DeviceId"),
77     (UINT, "SubSysId"),
78     (UINT, "Revision"),
79     (SIZE_T, "DedicatedVideoMemory"),
80     (SIZE_T, "DedicatedSystemMemory"),
81     (SIZE_T, "SharedSystemMemory"),
82     (LUID, "AdapterLuid"),
83 ])
84
85 DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [
86     (WString, "DeviceName"),
87     (RECT, "DesktopCoordinates"),
88     (BOOL, "AttachedToDesktop"),
89     (DXGI_MODE_ROTATION, "Rotation"),
90     (HMONITOR, "Monitor"),
91 ])
92
93 DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [
94     (HANDLE, "Handle"),
95 ])
96
97 DXGI_RESOURCE_PRIORITY = FakeEnum(UINT, [
98     "DXGI_RESOURCE_PRIORITY_MINIMUM",
99     "DXGI_RESOURCE_PRIORITY_LOW",
100     "DXGI_RESOURCE_PRIORITY_NORMAL",
101     "DXGI_RESOURCE_PRIORITY_HIGH",
102     "DXGI_RESOURCE_PRIORITY_MAXIMUM",
103 ])
104
105 DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [
106     "DXGI_RESIDENCY_FULLY_RESIDENT",
107     "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY",
108     "DXGI_RESIDENCY_EVICTED_TO_DISK",
109 ])
110
111 DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [
112     (UINT, "Width"),
113     (UINT, "Height"),
114     (DXGI_FORMAT, "Format"),
115     (DXGI_SAMPLE_DESC, "SampleDesc"),
116 ])
117
118 DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [
119     "DXGI_SWAP_EFFECT_DISCARD",
120     "DXGI_SWAP_EFFECT_SEQUENTIAL",
121 ])
122
123 DXGI_SWAP_CHAIN_FLAG = Flags(UINT, [
124     "DXGI_SWAP_CHAIN_FLAG_NONPREROTATED",
125     "DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH",
126     "DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE",
127 ])
128
129 DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [
130     (DXGI_MODE_DESC, "BufferDesc"),
131     (DXGI_SAMPLE_DESC, "SampleDesc"),
132     (DXGI_USAGE, "BufferUsage"),
133     (UINT, "BufferCount"),
134     (HWND, "OutputWindow"),
135     (BOOL, "Windowed"),
136     (DXGI_SWAP_EFFECT, "SwapEffect"),
137     (DXGI_SWAP_CHAIN_FLAG, "Flags"),
138 ])
139
140 IDXGIObject.methods += [
141     StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False),
142     StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False),
143     StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), Out(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False),
144     StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]),
145 ]
146
147 IDXGIDeviceSubObject.methods += [
148     StdMethod(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppDevice")]),
149 ]
150
151 IDXGIResource.methods += [
152     StdMethod(HRESULT, "GetSharedHandle", [Out(Pointer(HANDLE), "pSharedHandle")]),
153     StdMethod(HRESULT, "GetUsage", [Out(Pointer(DXGI_USAGE), "pUsage")], sideeffects=False),
154     StdMethod(HRESULT, "SetEvictionPriority", [(DXGI_RESOURCE_PRIORITY, "EvictionPriority")]),
155     StdMethod(HRESULT, "GetEvictionPriority", [Out(Pointer(DXGI_RESOURCE_PRIORITY), "pEvictionPriority")], sideeffects=False),
156 ]
157
158 DXGI_SHARED_RESOURCE_FLAG = Flags(DWORD, [
159     "DXGI_SHARED_RESOURCE_READ",
160     "DXGI_SHARED_RESOURCE_WRITE",
161 ])
162
163
164 IDXGIKeyedMutex.methods += [
165     StdMethod(HRESULT, "AcquireSync", [(UINT64, "Key"), (DWORD, "dwMilliseconds")]),
166     StdMethod(HRESULT, "ReleaseSync", [(UINT64, "Key")]),
167 ]
168
169 DXGI_MAP = Flags(UINT, [
170     "DXGI_MAP_READ",
171     "DXGI_MAP_WRITE",
172     "DXGI_MAP_DISCARD",
173 ])
174
175 IDXGISurface.methods += [
176     StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "pDesc")], sideeffects=False),
177     StdMethod(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect"), (DXGI_MAP, "MapFlags")]),
178     StdMethod(HRESULT, "Unmap", []),
179 ]
180
181 IDXGISurface1.methods += [
182     StdMethod(HRESULT, "GetDC", [(BOOL, "Discard"), Out(Pointer(HDC), "phdc")]),
183     StdMethod(HRESULT, "ReleaseDC", [(Pointer(RECT), "pDirtyRect")]),
184 ]
185
186 IDXGIAdapter.methods += [
187     StdMethod(HRESULT, "EnumOutputs", [(UINT, "Output"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
188     StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "pDesc")], sideeffects=False),
189     StdMethod(HRESULT, "CheckInterfaceSupport", [(REFGUID, "InterfaceName"), Out(Pointer(LARGE_INTEGER), "pUMDVersion")], sideeffects=False),
190 ]
191
192 DXGI_ENUM_MODES = Flags(UINT, [
193     "DXGI_ENUM_MODES_INTERLACED",
194     "DXGI_ENUM_MODES_SCALING",
195 ])
196
197 IDXGIOutput.methods += [
198     StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "pDesc")], sideeffects=False),
199     StdMethod(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), Out(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC, "*pNumModes"), "pDesc")], sideeffects=False),
200     StdMethod(HRESULT, "FindClosestMatchingMode", [(Pointer(Const(DXGI_MODE_DESC)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")]),
201     StdMethod(HRESULT, "WaitForVBlank", []),
202     StdMethod(HRESULT, "TakeOwnership", [(ObjPointer(IUnknown), "pDevice"), (BOOL, "Exclusive")]),
203     StdMethod(Void, "ReleaseOwnership", []),
204     StdMethod(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "pGammaCaps")]),
205     StdMethod(HRESULT, "SetGammaControl", [(Pointer(Const(DXGI_GAMMA_CONTROL)), "pArray")]),
206     StdMethod(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "pArray")], sideeffects=False),
207     StdMethod(HRESULT, "SetDisplaySurface", [(ObjPointer(IDXGISurface), "pScanoutSurface")]),
208     StdMethod(HRESULT, "GetDisplaySurfaceData", [(ObjPointer(IDXGISurface), "pDestination")]),
209     StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
210 ]
211
212 DXGI_PRESENT = Flags(UINT, [
213     "DXGI_PRESENT_TEST",
214     "DXGI_PRESENT_DO_NOT_SEQUENCE",
215     "DXGI_PRESENT_RESTART",
216 ])
217
218 IDXGISwapChain.methods += [
219     StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
220     StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
221     StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
222     StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
223     StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
224     StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
225     StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
226     StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
227     StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
228     StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
229 ]
230
231 DXGI_MWA = Flags(UINT, [
232     "DXGI_MWA_NO_WINDOW_CHANGES",
233     "DXGI_MWA_NO_ALT_ENTER",
234     "DXGI_MWA_NO_PRINT_SCREEN",
235     "DXGI_MWA_VALID",
236 ])
237
238 IDXGIFactory.methods += [
239     StdMethod(HRESULT, "EnumAdapters", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
240     StdMethod(HRESULT, "MakeWindowAssociation", [(HWND, "WindowHandle"), (DXGI_MWA, "Flags")]),
241     StdMethod(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "pWindowHandle")], sideeffects=False),
242     StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]),
243     StdMethod(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "Module"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
244 ]
245
246 IDXGIDevice.methods += [
247     StdMethod(HRESULT, "GetAdapter", [Out(Pointer(ObjPointer(IDXGIAdapter)), "pAdapter")]),
248     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")]),
249     StdMethod(HRESULT, "QueryResourceResidency", [(Array(Const(ObjPointer(IUnknown)), "NumResources"), "ppResources"), Out(Array(DXGI_RESIDENCY, "NumResources"), "pResidencyStatus"), (UINT, "NumResources")], sideeffects=False),
250     StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]),
251     StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False),
252 ]
253
254 DXGI_ADAPTER_FLAG = Enum("DXGI_ADAPTER_FLAG", [
255     "DXGI_ADAPTER_FLAG_NONE",
256     "DXGI_ADAPTER_FLAG_REMOTE",
257 ])
258
259 DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [
260     (WString, "Description"),
261     (UINT, "VendorId"),
262     (UINT, "DeviceId"),
263     (UINT, "SubSysId"),
264     (UINT, "Revision"),
265     (SIZE_T, "DedicatedVideoMemory"),
266     (SIZE_T, "DedicatedSystemMemory"),
267     (SIZE_T, "SharedSystemMemory"),
268     (LUID, "AdapterLuid"),
269     (UINT, "Flags"),
270 ])
271
272 DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [
273     (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"),
274     (Array(Array(FLOAT, 16), 2), "WhitePoints"),
275 ])
276
277 IDXGIFactory1.methods += [
278     StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]),
279     StdMethod(BOOL, "IsCurrent", []),
280 ]
281
282 IDXGIAdapter1.methods += [
283     StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False),
284 ]
285
286 IDXGIDevice1.methods += [
287     StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
288     StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
289 ]
290
291
292 IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown)
293 IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject)
294
295 IDXGIFactoryDWM.methods += [
296     StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]),
297 ]
298
299 IDXGISwapChainDWM.methods += [
300     StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
301     StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
302     StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
303     StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
304     StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
305     StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
306     StdMethod(HRESULT, "GetFrameStatistics", [(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
307     StdMethod(HRESULT, "GetLastPresentCount", [(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
308     StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
309     StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
310 ]
311
312
313 dxgi = Module('dxgi')
314 dxgi.addInterfaces([
315     IDXGIFactory1,
316     IDXGIFactoryDWM,
317 ])
318 dxgi.addFunctions([
319     StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
320     StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
321 ])