]> git.cworth.org Git - apitrace/blobdiff - specs/dxgi.py
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / specs / dxgi.py
index 0c17eb8685ec235d17efac79ada8af0019552209..b114bf5e1d3ce7a4b2243b5ee989913371b9d1e0 100644 (file)
 #
 ##########################################################################/
 
+
 from dxgitype import *
 
-HMONITOR = Alias("HMONITOR", HANDLE)
-_LUID = Struct("_LUID", [
-    (DWORD, "LowPart"),
-    (LONG, "HighPart"),
-])
 
-DXGI_USAGE = Alias("DXGI_USAGE", UINT)
-DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [
-    "DXGI_SWAP_EFFECT_DISCARD",
-    "DXGI_SWAP_EFFECT_SEQUENTIAL",
-])
-
-DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [
-    "DXGI_RESIDENCY_FULLY_RESIDENT",
-    "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY",
-    "DXGI_RESIDENCY_EVICTED_TO_DISK",
-])
-
-DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [
-    (UINT, "Width"),
-    (UINT, "Height"),
-    (DXGI_FORMAT, "Format"),
-    (DXGI_SAMPLE_DESC, "SampleDesc"),
-])
+IDXGIObject = Interface("IDXGIObject", IUnknown)
+IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject)
+IDXGIResource = Interface("IDXGIResource", IDXGIDeviceSubObject)
+IDXGIKeyedMutex = Interface("IDXGIKeyedMutex", IDXGIDeviceSubObject)
+IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject)
+IDXGISurface1 = Interface("IDXGISurface1", IDXGISurface)
+IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
+IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
+IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
+IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
+IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
+IDXGIFactory1 = Interface("IDXGIFactory1", IDXGIFactory)
+IDXGIAdapter1 = Interface("IDXGIAdapter1", IDXGIAdapter)
+IDXGIDevice1 = Interface("IDXGIDevice1", IDXGIDevice)
 
-DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [
-    (INT, "Pitch"),
-    (OpaquePointer(BYTE), "pBits"),
-])
 
-DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [
-    (Array(WCHAR, "32"), "DeviceName"),
-    (RECT, "DesktopCoordinates"),
-    (BOOL, "AttachedToDesktop"),
-    (DXGI_MODE_ROTATION, "Rotation"),
-    (HMONITOR, "Monitor"),
+DXGI_USAGE = Flags(UINT, [
+    "DXGI_CPU_ACCESS_NONE", # 0
+    "DXGI_CPU_ACCESS_SCRATCH", # 3
+    "DXGI_CPU_ACCESS_DYNAMIC", # 1
+    "DXGI_CPU_ACCESS_READ_WRITE", # 2
+    "DXGI_USAGE_SHADER_INPUT",
+    "DXGI_USAGE_RENDER_TARGET_OUTPUT",
+    "DXGI_USAGE_BACK_BUFFER",
+    "DXGI_USAGE_SHARED",
+    "DXGI_USAGE_READ_ONLY",
+    "DXGI_USAGE_DISCARD_ON_PRESENT",
+    "DXGI_USAGE_UNORDERED_ACCESS",
 ])
 
 DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [
@@ -71,8 +65,13 @@ DXGI_FRAME_STATISTICS = Struct("DXGI_FRAME_STATISTICS", [
     (LARGE_INTEGER, "SyncGPUTime"),
 ])
 
+DXGI_MAPPED_RECT = Struct("DXGI_MAPPED_RECT", [
+    (INT, "Pitch"),
+    (OpaquePointer(BYTE), "pBits"),
+])
+
 DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [
-    (Array(WCHAR, "128"), "Description"),
+    (WString, "Description"),
     (UINT, "VendorId"),
     (UINT, "DeviceId"),
     (UINT, "SubSysId"),
@@ -83,7 +82,45 @@ DXGI_ADAPTER_DESC = Struct("DXGI_ADAPTER_DESC", [
     (LUID, "AdapterLuid"),
 ])
 
-DXGI_SWAP_CHAIN_FLAG = Enum("DXGI_SWAP_CHAIN_FLAG", [
+DXGI_OUTPUT_DESC = Struct("DXGI_OUTPUT_DESC", [
+    (WString, "DeviceName"),
+    (RECT, "DesktopCoordinates"),
+    (BOOL, "AttachedToDesktop"),
+    (DXGI_MODE_ROTATION, "Rotation"),
+    (HMONITOR, "Monitor"),
+])
+
+DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [
+    (HANDLE, "Handle"),
+])
+
+DXGI_RESOURCE_PRIORITY = FakeEnum(UINT, [
+    "DXGI_RESOURCE_PRIORITY_MINIMUM",
+    "DXGI_RESOURCE_PRIORITY_LOW",
+    "DXGI_RESOURCE_PRIORITY_NORMAL",
+    "DXGI_RESOURCE_PRIORITY_HIGH",
+    "DXGI_RESOURCE_PRIORITY_MAXIMUM",
+])
+
+DXGI_RESIDENCY = Enum("DXGI_RESIDENCY", [
+    "DXGI_RESIDENCY_FULLY_RESIDENT",
+    "DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY",
+    "DXGI_RESIDENCY_EVICTED_TO_DISK",
+])
+
+DXGI_SURFACE_DESC = Struct("DXGI_SURFACE_DESC", [
+    (UINT, "Width"),
+    (UINT, "Height"),
+    (DXGI_FORMAT, "Format"),
+    (DXGI_SAMPLE_DESC, "SampleDesc"),
+])
+
+DXGI_SWAP_EFFECT = Enum("DXGI_SWAP_EFFECT", [
+    "DXGI_SWAP_EFFECT_DISCARD",
+    "DXGI_SWAP_EFFECT_SEQUENTIAL",
+])
+
+DXGI_SWAP_CHAIN_FLAG = Flags(UINT, [
     "DXGI_SWAP_CHAIN_FLAG_NONPREROTATED",
     "DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH",
     "DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE",
@@ -97,87 +134,188 @@ DXGI_SWAP_CHAIN_DESC = Struct("DXGI_SWAP_CHAIN_DESC", [
     (HWND, "OutputWindow"),
     (BOOL, "Windowed"),
     (DXGI_SWAP_EFFECT, "SwapEffect"),
-    (UINT, "Flags"),
-])
-
-DXGI_SHARED_RESOURCE = Struct("DXGI_SHARED_RESOURCE", [
-    (HANDLE, "Handle"),
+    (DXGI_SWAP_CHAIN_FLAG, "Flags"),
 ])
 
-IDXGIObject = Interface("IDXGIObject", IUnknown)
 IDXGIObject.methods += [
-    Method(HRESULT, "SetPrivateData", [(REFGUID, "guid"), (UINT, "data_size"), (OpaquePointer(Const(Void)), "data")]),
-    Method(HRESULT, "SetPrivateDataInterface", [(REFGUID, "guid"), (OpaquePointer(Const(IUnknown)), "object")]),
-    Method(HRESULT, "GetPrivateData", [(REFGUID, "guid"), Out(Pointer(UINT), "data_size"), Out(OpaquePointer(Void), "data")]),
-    Method(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(OpaquePointer(Void)), "parent")]),
+    StdMethod(HRESULT, "SetPrivateData", [(REFGUID, "Name"), (UINT, "DataSize"), (OpaqueBlob(Const(Void), "DataSize"), "pData")], sideeffects=False),
+    StdMethod(HRESULT, "SetPrivateDataInterface", [(REFGUID, "Name"), (OpaquePointer(Const(IUnknown)), "pUnknown")], sideeffects=False),
+    StdMethod(HRESULT, "GetPrivateData", [(REFGUID, "Name"), Out(Pointer(UINT), "pDataSize"), Out(OpaquePointer(Void), "pData")], sideeffects=False),
+    StdMethod(HRESULT, "GetParent", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppParent")]),
 ]
 
-IDXGIDeviceSubObject = Interface("IDXGIDeviceSubObject", IDXGIObject)
 IDXGIDeviceSubObject.methods += [
-    Method(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(OpaquePointer(Void)), "device")]),
+    StdMethod(HRESULT, "GetDevice", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppDevice")]),
 ]
 
-IDXGISurface = Interface("IDXGISurface", IDXGIDeviceSubObject)
+IDXGIResource.methods += [
+    StdMethod(HRESULT, "GetSharedHandle", [Out(Pointer(HANDLE), "pSharedHandle")]),
+    StdMethod(HRESULT, "GetUsage", [Out(Pointer(DXGI_USAGE), "pUsage")], sideeffects=False),
+    StdMethod(HRESULT, "SetEvictionPriority", [(DXGI_RESOURCE_PRIORITY, "EvictionPriority")]),
+    StdMethod(HRESULT, "GetEvictionPriority", [Out(Pointer(DXGI_RESOURCE_PRIORITY), "pEvictionPriority")], sideeffects=False),
+]
+
+DXGI_SHARED_RESOURCE_FLAG = Flags(DWORD, [
+    "DXGI_SHARED_RESOURCE_READ",
+    "DXGI_SHARED_RESOURCE_WRITE",
+])
+
+
+IDXGIKeyedMutex.methods += [
+    StdMethod(HRESULT, "AcquireSync", [(UINT64, "Key"), (DWORD, "dwMilliseconds")]),
+    StdMethod(HRESULT, "ReleaseSync", [(UINT64, "Key")]),
+]
+
+DXGI_MAP = Flags(UINT, [
+    "DXGI_MAP_READ",
+    "DXGI_MAP_WRITE",
+    "DXGI_MAP_DISCARD",
+])
+
 IDXGISurface.methods += [
-    Method(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "desc")]),
-    Method(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "mapped_rect"), (UINT, "flags")]),
-    Method(HRESULT, "Unmap", []),
+    StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SURFACE_DESC), "pDesc")], sideeffects=False),
+    StdMethod(HRESULT, "Map", [Out(Pointer(DXGI_MAPPED_RECT), "pLockedRect"), (DXGI_MAP, "MapFlags")]),
+    StdMethod(HRESULT, "Unmap", []),
 ]
 
-IDXGIOutput = Interface("IDXGIOutput", IDXGIObject)
-IDXGIOutput.methods += [
-    Method(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "desc")]),
-    Method(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "format"), (UINT, "flags"), Out(Pointer(UINT), "mode_count"), Out(Array(DXGI_MODE_DESC, "*mode_count"), "desc")]),
-    Method(HRESULT, "FindClosestMatchingMode", [(Const(Pointer(DXGI_MODE_DESC)), "mode"), Out(Pointer(DXGI_MODE_DESC), "closest_match"), (OpaquePointer(IUnknown), "device")]),
-    Method(HRESULT, "WaitForVBlank", []),
-    Method(HRESULT, "TakeOwnership", [(OpaquePointer(IUnknown), "device"), (BOOL, "exclusive")]),
-    Method(Void, "ReleaseOwnership", []),
-    Method(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "gamma_caps")]),
-    Method(HRESULT, "SetGammaControl", [(Const(Pointer(DXGI_GAMMA_CONTROL)), "gamma_control")]),
-    Method(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "gamma_control")]),
-    Method(HRESULT, "SetDisplaySurface", [(OpaquePointer(IDXGISurface), "surface")]),
-    Method(HRESULT, "GetDisplaySurfaceData", [(OpaquePointer(IDXGISurface), "surface")]),
-    Method(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "stats")]),
+IDXGISurface1.methods += [
+    StdMethod(HRESULT, "GetDC", [(BOOL, "Discard"), Out(Pointer(HDC), "phdc")]),
+    StdMethod(HRESULT, "ReleaseDC", [(Pointer(RECT), "pDirtyRect")]),
 ]
 
-IDXGIAdapter = Interface("IDXGIAdapter", IDXGIObject)
 IDXGIAdapter.methods += [
-    Method(HRESULT, "EnumOutputs", [(UINT, "output_idx"), Out(Pointer(OpaquePointer(IDXGIOutput)), "output")]),
-    Method(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "desc")]),
-    Method(HRESULT, "CheckInterfaceSupport", [(REFGUID, "guid"), Out(Pointer(LARGE_INTEGER), "umd_version")]),
+    StdMethod(HRESULT, "EnumOutputs", [(UINT, "Output"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
+    StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_ADAPTER_DESC), "pDesc")], sideeffects=False),
+    StdMethod(HRESULT, "CheckInterfaceSupport", [(REFGUID, "InterfaceName"), Out(Pointer(LARGE_INTEGER), "pUMDVersion")], sideeffects=False),
 ]
 
-IDXGISwapChain = Interface("IDXGISwapChain", IDXGIDeviceSubObject)
+DXGI_ENUM_MODES = Flags(UINT, [
+    "DXGI_ENUM_MODES_INTERLACED",
+    "DXGI_ENUM_MODES_SCALING",
+])
+
+IDXGIOutput.methods += [
+    StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_OUTPUT_DESC), "pDesc")], sideeffects=False),
+    StdMethod(HRESULT, "GetDisplayModeList", [(DXGI_FORMAT, "EnumFormat"), (DXGI_ENUM_MODES, "Flags"), Out(Pointer(UINT), "pNumModes"), Out(Array(DXGI_MODE_DESC, "*pNumModes"), "pDesc")], sideeffects=False),
+    StdMethod(HRESULT, "FindClosestMatchingMode", [(Pointer(Const(DXGI_MODE_DESC)), "pModeToMatch"), Out(Pointer(DXGI_MODE_DESC), "pClosestMatch"), (ObjPointer(IUnknown), "pConcernedDevice")]),
+    StdMethod(HRESULT, "WaitForVBlank", []),
+    StdMethod(HRESULT, "TakeOwnership", [(ObjPointer(IUnknown), "pDevice"), (BOOL, "Exclusive")]),
+    StdMethod(Void, "ReleaseOwnership", []),
+    StdMethod(HRESULT, "GetGammaControlCapabilities", [Out(Pointer(DXGI_GAMMA_CONTROL_CAPABILITIES), "pGammaCaps")]),
+    StdMethod(HRESULT, "SetGammaControl", [(Pointer(Const(DXGI_GAMMA_CONTROL)), "pArray")]),
+    StdMethod(HRESULT, "GetGammaControl", [Out(Pointer(DXGI_GAMMA_CONTROL), "pArray")], sideeffects=False),
+    StdMethod(HRESULT, "SetDisplaySurface", [(ObjPointer(IDXGISurface), "pScanoutSurface")]),
+    StdMethod(HRESULT, "GetDisplaySurfaceData", [(ObjPointer(IDXGISurface), "pDestination")]),
+    StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
+]
+
+DXGI_PRESENT = Flags(UINT, [
+    "DXGI_PRESENT_TEST",
+    "DXGI_PRESENT_DO_NOT_SEQUENCE",
+    "DXGI_PRESENT_RESTART",
+])
+
 IDXGISwapChain.methods += [
-    Method(HRESULT, "Present", [(UINT, "sync_interval"), (UINT, "flags")]),
-    Method(HRESULT, "GetBuffer", [(UINT, "buffer_idx"), (REFIID, "riid"), Out(Pointer(OpaquePointer(Void)), "surface")]),
-    Method(HRESULT, "SetFullscreenState", [(BOOL, "fullscreen"), (OpaquePointer(IDXGIOutput), "target")]),
-    Method(HRESULT, "GetFullscreenState", [Out(OpaquePointer(BOOL), "fullscreen"), Out(Pointer(OpaquePointer(IDXGIOutput)), "target")]),
-    Method(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "desc")]),
-    Method(HRESULT, "ResizeBuffers", [(UINT, "buffer_count"), (UINT, "width"), (UINT, "height"), (DXGI_FORMAT, "format"), (UINT, "flags")]),
-    Method(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "target_mode_desc")]),
-    Method(HRESULT, "GetContainingOutput", [Out(Pointer(OpaquePointer(IDXGIOutput)), "output")]),
-    Method(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "stats")]),
-    Method(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "last_present_count")]),
+    StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
+    StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
+    StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
+    StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
+    StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
+    StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
+    StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
+    StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
+    StdMethod(HRESULT, "GetFrameStatistics", [Out(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
+    StdMethod(HRESULT, "GetLastPresentCount", [Out(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
 ]
 
-IDXGIFactory = Interface("IDXGIFactory", IDXGIObject)
+DXGI_MWA = Flags(UINT, [
+    "DXGI_MWA_NO_WINDOW_CHANGES",
+    "DXGI_MWA_NO_ALT_ENTER",
+    "DXGI_MWA_NO_PRINT_SCREEN",
+    "DXGI_MWA_VALID",
+])
+
 IDXGIFactory.methods += [
-    Method(HRESULT, "EnumAdapters", [(UINT, "adapter_idx"), Out(Pointer(OpaquePointer(IDXGIAdapter)), "adapter")]),
-    Method(HRESULT, "MakeWindowAssociation", [(HWND, "window"), (UINT, "flags")]),
-    Method(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "window")]),
-    Method(HRESULT, "CreateSwapChain", [(OpaquePointer(IUnknown), "device"), (Pointer(DXGI_SWAP_CHAIN_DESC), "desc"), Out(Pointer(OpaquePointer(IDXGISwapChain)), "swapchain")]),
-    Method(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "swrast"), Out(Pointer(OpaquePointer(IDXGIAdapter)), "adapter")]),
+    StdMethod(HRESULT, "EnumAdapters", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
+    StdMethod(HRESULT, "MakeWindowAssociation", [(HWND, "WindowHandle"), (DXGI_MWA, "Flags")]),
+    StdMethod(HRESULT, "GetWindowAssociation", [Out(Pointer(HWND), "pWindowHandle")], sideeffects=False),
+    StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain")]),
+    StdMethod(HRESULT, "CreateSoftwareAdapter", [(HMODULE, "Module"), Out(Pointer(ObjPointer(IDXGIAdapter)), "ppAdapter")]),
 ]
 
-#StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), (Pointer(OpaquePointer(Void)), "factory")]),
-
-IDXGIDevice = Interface("IDXGIDevice", IDXGIObject)
 IDXGIDevice.methods += [
-    Method(HRESULT, "GetAdapter", [Out(Pointer(OpaquePointer(IDXGIAdapter)), "adapter")]),
-    Method(HRESULT, "CreateSurface", [(Const(Pointer(DXGI_SURFACE_DESC)), "desc"), (UINT, "surface_count"), (DXGI_USAGE, "usage"), (Const(Pointer(DXGI_SHARED_RESOURCE)), "shared_resource"), Out(Pointer(OpaquePointer(IDXGISurface)), "surface")]),
-    Method(HRESULT, "QueryResourceResidency", [(Array(Const(OpaquePointer(IUnknown)), "resource_count"), "resources"), Out(Array(DXGI_RESIDENCY, "resource_count"), "residency"), (UINT, "resource_count")]),
-    Method(HRESULT, "SetGPUThreadPriority", [(INT, "priority")]),
-    Method(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "priority")]),
+    StdMethod(HRESULT, "GetAdapter", [Out(Pointer(ObjPointer(IDXGIAdapter)), "pAdapter")]),
+    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")]),
+    StdMethod(HRESULT, "QueryResourceResidency", [(Array(Const(ObjPointer(IUnknown)), "NumResources"), "ppResources"), Out(Array(DXGI_RESIDENCY, "NumResources"), "pResidencyStatus"), (UINT, "NumResources")], sideeffects=False),
+    StdMethod(HRESULT, "SetGPUThreadPriority", [(INT, "Priority")]),
+    StdMethod(HRESULT, "GetGPUThreadPriority", [Out(Pointer(INT), "pPriority")], sideeffects=False),
 ]
 
+DXGI_ADAPTER_FLAG = Enum("DXGI_ADAPTER_FLAG", [
+    "DXGI_ADAPTER_FLAG_NONE",
+    "DXGI_ADAPTER_FLAG_REMOTE",
+])
+
+DXGI_ADAPTER_DESC1 = Struct("DXGI_ADAPTER_DESC1", [
+    (WString, "Description"),
+    (UINT, "VendorId"),
+    (UINT, "DeviceId"),
+    (UINT, "SubSysId"),
+    (UINT, "Revision"),
+    (SIZE_T, "DedicatedVideoMemory"),
+    (SIZE_T, "DedicatedSystemMemory"),
+    (SIZE_T, "SharedSystemMemory"),
+    (LUID, "AdapterLuid"),
+    (UINT, "Flags"),
+])
+
+DXGI_DISPLAY_COLOR_SPACE = Struct("DXGI_DISPLAY_COLOR_SPACE", [
+    (Array(Array(FLOAT, 8), 2), "PrimaryCoordinates"),
+    (Array(Array(FLOAT, 16), 2), "WhitePoints"),
+])
+
+IDXGIFactory1.methods += [
+    StdMethod(HRESULT, "EnumAdapters1", [(UINT, "Adapter"), Out(Pointer(ObjPointer(IDXGIAdapter1)), "ppAdapter")]),
+    StdMethod(BOOL, "IsCurrent", []),
+]
+
+IDXGIAdapter1.methods += [
+    StdMethod(HRESULT, "GetDesc1", [Out(Pointer(DXGI_ADAPTER_DESC1), "pDesc")], sideeffects=False),
+]
+
+IDXGIDevice1.methods += [
+    StdMethod(HRESULT, "SetMaximumFrameLatency", [(UINT, "MaxLatency")]),
+    StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
+]
+
+
+IDXGIFactoryDWM = Interface("IDXGIFactoryDWM", IUnknown)
+IDXGISwapChainDWM = Interface("IDXGISwapChainDWM", IDXGIDeviceSubObject)
+
+IDXGIFactoryDWM.methods += [
+    StdMethod(HRESULT, "CreateSwapChain", [(ObjPointer(IUnknown), "pDevice"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc"), (ObjPointer(IDXGIOutput), "pOutput"), Out(Pointer(ObjPointer(IDXGISwapChainDWM)), "ppSwapChain")]),
+]
+
+IDXGISwapChainDWM.methods += [
+    StdMethod(HRESULT, "Present", [(UINT, "SyncInterval"), (DXGI_PRESENT, "Flags")]),
+    StdMethod(HRESULT, "GetBuffer", [(UINT, "Buffer"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppSurface")]),
+    StdMethod(HRESULT, "GetDesc", [Out(Pointer(DXGI_SWAP_CHAIN_DESC), "pDesc")], sideeffects=False),
+    StdMethod(HRESULT, "ResizeBuffers", [(UINT, "BufferCount"), (UINT, "Width"), (UINT, "Height"), (DXGI_FORMAT, "NewFormat"), (DXGI_SWAP_CHAIN_FLAG, "SwapChainFlags")]),
+    StdMethod(HRESULT, "ResizeTarget", [(Pointer(Const(DXGI_MODE_DESC)), "pNewTargetParameters")]),
+    StdMethod(HRESULT, "GetContainingOutput", [Out(Pointer(ObjPointer(IDXGIOutput)), "ppOutput")]),
+    StdMethod(HRESULT, "GetFrameStatistics", [(Pointer(DXGI_FRAME_STATISTICS), "pStats")], sideeffects=False),
+    StdMethod(HRESULT, "GetLastPresentCount", [(Pointer(UINT), "pLastPresentCount")], sideeffects=False),
+    StdMethod(HRESULT, "SetFullscreenState", [(BOOL, "Fullscreen"), (ObjPointer(IDXGIOutput), "pTarget")]),
+    StdMethod(HRESULT, "GetFullscreenState", [Out(Pointer(BOOL), "pFullscreen"), Out(Pointer(ObjPointer(IDXGIOutput)), "ppTarget")]),
+]
+
+
+dxgi = Module('dxgi')
+dxgi.addInterfaces([
+    IDXGIFactory1,
+    IDXGIFactoryDWM,
+])
+dxgi.addFunctions([
+    StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
+    StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
+])