mirror of
https://github.com/iperov/DeepFaceLive
synced 2025-08-19 13:09:58 -07:00
update xlib.api.win32
This commit is contained in:
parent
190223f179
commit
5454f94a1b
4 changed files with 195 additions and 6 deletions
3
xlib/api/win32/dxgi/__init__.py
Normal file
3
xlib/api/win32/dxgi/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from .dxgi import (DXGI_ADAPTER_DESC1, CreateDXGIFactory1, CreateDXGIFactory2, DXGI_ADAPTER_FLAG, IDXGIAdapter,
|
||||||
|
IDXGIAdapter1, IDXGIFactory, IDXGIFactory1, IDXGIFactory2, IDXGIFactory3, IDXGIFactory4, IDXGIObject,
|
||||||
|
create_DXGIFactory1, create_DXGIFactory2, create_DXGIFactory3, create_DXGIFactory4)
|
121
xlib/api/win32/dxgi/dxgi.py
Normal file
121
xlib/api/win32/dxgi/dxgi.py
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
from ctypes import (POINTER, WINFUNCTYPE, byref, c_byte, c_int64, c_longlong,
|
||||||
|
c_size_t, c_ubyte, c_uint, c_uint32, c_ulong, c_void_p,
|
||||||
|
c_wchar)
|
||||||
|
from typing import List, Union
|
||||||
|
from xlib.api.win32.wintypes.wintypes import BOOL
|
||||||
|
|
||||||
|
from ..wintypes import (ERROR, GUID, HRESULT, REFGUID, REFIID, IUnknown, dll_import,
|
||||||
|
interface)
|
||||||
|
from .structs import *
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIObject(IUnknown):
|
||||||
|
def SetPrivateData (self, guid : REFGUID, id : c_uint, data : c_void_p) -> HRESULT: ...
|
||||||
|
def SetPrivateDataInterface (self, guid : REFGUID, interface : IUnknown) -> HRESULT: ...
|
||||||
|
def GetPrivateData (self, guid : REFGUID, in_out_data_size : POINTER(c_uint), out_data : c_void_p ) -> HRESULT: ...
|
||||||
|
def GetParent (self, iid : REFIID, out_interface : POINTER(IUnknown)) -> HRESULT: ...
|
||||||
|
IID = GUID('aec22fb8-76f3-4639-9be0-28eb43a67a2e')
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIAdapter(IDXGIObject):
|
||||||
|
def EnumOutputs (self, output : c_uint, output_interface : POINTER(c_void_p) ) -> HRESULT: ... ## IDXGIOutput**
|
||||||
|
def GetDesc (self, out_desc : POINTER(DXGI_ADAPTER_DESC)) -> HRESULT: ...
|
||||||
|
def CheckInterfaceSupport (self, guid : REFGUID, out_umdversion : POINTER(c_longlong) ) -> HRESULT: ... #InterfaceName, pUMDVersion
|
||||||
|
IID = GUID('2411e7e1-12ac-4ccf-bd14-9798e8534dc0')
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIAdapter1(IDXGIAdapter):
|
||||||
|
def GetDesc1 (self, out_desc1 : POINTER(DXGI_ADAPTER_DESC1) ) -> HRESULT: ...
|
||||||
|
IID = GUID('29038f61-3839-4626-91fd-086879011a05')
|
||||||
|
|
||||||
|
def get_desc1(self) -> Union[DXGI_ADAPTER_DESC1, None]:
|
||||||
|
desc1 = DXGI_ADAPTER_DESC1()
|
||||||
|
if self.GetDesc1(desc1) == ERROR.SUCCESS:
|
||||||
|
return desc1
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
desc = self.get_desc1()
|
||||||
|
if desc is not None:
|
||||||
|
return f'IDXGIAdapter1 object: {desc.Description}'
|
||||||
|
else:
|
||||||
|
return f'IDXGIAdapter1 object'
|
||||||
|
|
||||||
|
def __repr__(self): return self.__str__()
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIFactory(IDXGIObject):
|
||||||
|
def EnumAdapters(self) -> None: ...
|
||||||
|
def MakeWindowAssociation(self) -> None: ...
|
||||||
|
def GetWindowAssociation(self) -> None: ...
|
||||||
|
def CreateSwapChain(self) -> None: ...
|
||||||
|
def CreateSoftwareAdapter(self) -> None: ...
|
||||||
|
IID = GUID('7b7166ec-21c7-44ae-b21a-c9ae321ae369')
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIFactory1(IDXGIFactory):
|
||||||
|
def EnumAdapters1(self, adapter_id : c_uint, out_interface : POINTER(IDXGIAdapter1)) -> HRESULT: ...
|
||||||
|
def IsCurrent(self) -> BOOL: ...
|
||||||
|
|
||||||
|
IID = GUID('770aae78-f26f-4dba-a829-253c83d1b387')
|
||||||
|
|
||||||
|
def enum_adapters1(self, id : int) -> Union[IDXGIAdapter1, None]:
|
||||||
|
result = IDXGIAdapter1()
|
||||||
|
if self.EnumAdapters1(id, result) == ERROR.SUCCESS:
|
||||||
|
return result
|
||||||
|
return None
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIFactory2(IDXGIFactory1):
|
||||||
|
def IsWindowedStereoEnabled(self) -> None: ...
|
||||||
|
def CreateSwapChainForHwnd(self) -> None: ...
|
||||||
|
def CreateSwapChainForCoreWindow(self) -> None: ...
|
||||||
|
def GetSharedResourceAdapterLuid(self) -> None: ...
|
||||||
|
def RegisterStereoStatusWindow(self) -> None: ...
|
||||||
|
def RegisterStereoStatusEvent(self) -> None: ...
|
||||||
|
def UnregisterStereoStatus(self) -> None: ...
|
||||||
|
def RegisterOcclusionStatusWindow(self) -> None: ...
|
||||||
|
def RegisterOcclusionStatusEvent(self) -> None: ...
|
||||||
|
def UnregisterOcclusionStatus(self) -> None: ...
|
||||||
|
def CreateSwapChainForComposition(self) -> None: ...
|
||||||
|
IID = GUID('50c83a1c-e072-4c48-87b0-3630fa36a6d0')
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIFactory3(IDXGIFactory2):
|
||||||
|
def GetCreationFlags(self) -> None: ...
|
||||||
|
IID = GUID('25483823-cd46-4c7d-86ca-47aa95b837bd')
|
||||||
|
|
||||||
|
@interface
|
||||||
|
class IDXGIFactory4(IDXGIFactory2):
|
||||||
|
def EnumAdapterByLuid(self) -> None: ...
|
||||||
|
def EnumWarpAdapter(self) -> None: ...
|
||||||
|
IID = GUID('1bc6ea02-ef36-464f-bf0c-21ca39e5168a')
|
||||||
|
|
||||||
|
@dll_import('dxgi')
|
||||||
|
def CreateDXGIFactory1(refiid : REFIID, p_IDXGIFactory1 : POINTER(IDXGIFactory1) ) -> HRESULT: ...
|
||||||
|
@dll_import('dxgi')
|
||||||
|
def CreateDXGIFactory2(flags : c_uint, refiid : REFIID, p_IDXGIFactory2 : POINTER(IDXGIFactory2) ) -> HRESULT: ...
|
||||||
|
|
||||||
|
def create_DXGIFactory1() -> Union[IDXGIFactory1, None]:
|
||||||
|
result = IDXGIFactory1()
|
||||||
|
if CreateDXGIFactory1(IDXGIFactory1.IID, result ) == ERROR.SUCCESS:
|
||||||
|
return result
|
||||||
|
return None
|
||||||
|
|
||||||
|
def create_DXGIFactory2() -> Union[IDXGIFactory2, None]:
|
||||||
|
result = IDXGIFactory2()
|
||||||
|
if CreateDXGIFactory2(0, IDXGIFactory2.IID, result ) == ERROR.SUCCESS:
|
||||||
|
return result
|
||||||
|
return None
|
||||||
|
|
||||||
|
def create_DXGIFactory3() -> Union[IDXGIFactory3, None]:
|
||||||
|
result = IDXGIFactory3()
|
||||||
|
if CreateDXGIFactory2(0, IDXGIFactory3.IID, result ) == ERROR.SUCCESS:
|
||||||
|
return result
|
||||||
|
return None
|
||||||
|
|
||||||
|
def create_DXGIFactory4() -> Union[IDXGIFactory4, None]:
|
||||||
|
result = IDXGIFactory4()
|
||||||
|
if CreateDXGIFactory2(0, IDXGIFactory4.IID, result ) == ERROR.SUCCESS:
|
||||||
|
return result
|
||||||
|
return None
|
60
xlib/api/win32/dxgi/structs.py
Normal file
60
xlib/api/win32/dxgi/structs.py
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
import ctypes as ct
|
||||||
|
from ctypes import (POINTER, WINFUNCTYPE, byref, c_byte, c_int64,
|
||||||
|
c_longlong, c_size_t, c_ubyte, c_uint, c_uint32, c_ulong,
|
||||||
|
c_void_p, c_wchar)
|
||||||
|
|
||||||
|
class DXGI_ADAPTER_FLAG(c_uint):
|
||||||
|
DXGI_ADAPTER_FLAG_NONE = 0
|
||||||
|
DXGI_ADAPTER_FLAG_REMOTE = 1
|
||||||
|
DXGI_ADAPTER_FLAG_SOFTWARE = 2
|
||||||
|
DXGI_ADAPTER_FLAG_FORCE_DWORD = 0xffffffff
|
||||||
|
|
||||||
|
class DXGI_ADAPTER_DESC(ct.Structure):
|
||||||
|
_fields_ = [('Description', c_wchar * 128),
|
||||||
|
('VendorId', c_uint),
|
||||||
|
('DeviceId', c_uint),
|
||||||
|
('SubSysId', c_uint),
|
||||||
|
('Revision', c_uint),
|
||||||
|
('DedicatedVideoMemory', c_size_t),
|
||||||
|
('DedicatedSystemMemory', c_size_t),
|
||||||
|
('SharedSystemMemory', c_size_t),
|
||||||
|
('AdapterLuid', c_longlong),
|
||||||
|
]
|
||||||
|
def __init__(self):
|
||||||
|
self.Description : c_wchar * 128 = ''
|
||||||
|
self.VendorId : c_uint = c_uint()
|
||||||
|
self.DeviceId : c_uint = c_uint()
|
||||||
|
self.SubSysId : c_uint = c_uint()
|
||||||
|
self.Revision : c_uint = c_uint()
|
||||||
|
self.DedicatedVideoMemory : c_size_t = c_size_t()
|
||||||
|
self.DedicatedSystemMemory : c_size_t = c_size_t()
|
||||||
|
self.SharedSystemMemory : c_size_t = c_size_t()
|
||||||
|
self.AdapterLuid : c_longlong = c_longlong()
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
class DXGI_ADAPTER_DESC1(ct.Structure):
|
||||||
|
_fields_ = [('Description', c_wchar * 128),
|
||||||
|
('VendorId', c_uint),
|
||||||
|
('DeviceId', c_uint),
|
||||||
|
('SubSysId', c_uint),
|
||||||
|
('Revision', c_uint),
|
||||||
|
('DedicatedVideoMemory', c_size_t),
|
||||||
|
('DedicatedSystemMemory', c_size_t),
|
||||||
|
('SharedSystemMemory', c_size_t),
|
||||||
|
('AdapterLuid', c_longlong),
|
||||||
|
('Flags', c_uint),
|
||||||
|
]
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.Description : c_wchar * 128 = ''
|
||||||
|
self.VendorId : c_uint = c_uint()
|
||||||
|
self.DeviceId : c_uint = c_uint()
|
||||||
|
self.SubSysId : c_uint = c_uint()
|
||||||
|
self.Revision : c_uint = c_uint()
|
||||||
|
self.DedicatedVideoMemory : c_size_t = c_size_t()
|
||||||
|
self.DedicatedSystemMemory : c_size_t = c_size_t()
|
||||||
|
self.SharedSystemMemory : c_size_t = c_size_t()
|
||||||
|
self.AdapterLuid : c_longlong = c_longlong()
|
||||||
|
self.Flags : c_uint = c_uint()
|
||||||
|
|
||||||
|
super().__init__()
|
|
@ -15,16 +15,21 @@ def dll_import(dll_name):
|
||||||
dll = ctypes.cdll.LoadLibrary(find_library(dll_name))
|
dll = ctypes.cdll.LoadLibrary(find_library(dll_name))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
if dll is None:
|
|
||||||
raise RuntimeError(f'Unable to load {dll_name} library.')
|
|
||||||
dlls_by_name[dll_name] = dll
|
dlls_by_name[dll_name] = dll
|
||||||
|
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
dll_func = getattr(dll, func.__name__)
|
if dll is not None:
|
||||||
anno = list(func.__annotations__.values())
|
dll_func = getattr(dll, func.__name__)
|
||||||
dll_func.argtypes = anno[:-1]
|
anno = list(func.__annotations__.values())
|
||||||
dll_func.restype = anno[-1]
|
dll_func.argtypes = anno[:-1]
|
||||||
|
dll_func.restype = anno[-1]
|
||||||
|
else:
|
||||||
|
dll_func = None
|
||||||
|
|
||||||
def wrapper(*args):
|
def wrapper(*args):
|
||||||
|
if dll_func is None:
|
||||||
|
raise RuntimeError(f'Unable to load {dll_name} library.')
|
||||||
return dll_func(*args)
|
return dll_func(*args)
|
||||||
return wrapper
|
return wrapper
|
||||||
return decorator
|
return decorator
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue