mirror of https://github.com/vladmandic/automatic
48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
import ctypes as C
|
|
from modules.dml.memory_amd.driver.atiadlxx_apis import ADL2_Main_Control_Create, ADL_Main_Memory_Alloc, ADL2_Adapter_NumberOfAdapters_Get, ADL2_Adapter_AdapterInfo_Get, ADL2_Adapter_MemoryInfo2_Get, ADL2_Adapter_DedicatedVRAMUsage_Get, ADL2_Adapter_VRAMUsage_Get
|
|
from modules.dml.memory_amd.driver.atiadlxx_structures import ADL_CONTEXT_HANDLE, AdapterInfo, LPAdapterInfo, ADLMemoryInfo2
|
|
from modules.dml.memory_amd.driver.atiadlxx_defines import ADL_OK
|
|
|
|
|
|
class ATIADLxx:
|
|
iHyperMemorySize = 0
|
|
|
|
def __init__(self):
|
|
self.context = ADL_CONTEXT_HANDLE()
|
|
ADL2_Main_Control_Create(ADL_Main_Memory_Alloc, 1, C.byref(self.context))
|
|
num_adapters = C.c_int(-1)
|
|
ADL2_Adapter_NumberOfAdapters_Get(self.context, C.byref(num_adapters))
|
|
AdapterInfoArray = (AdapterInfo * num_adapters.value)()
|
|
ADL2_Adapter_AdapterInfo_Get(self.context, C.cast(AdapterInfoArray, LPAdapterInfo), C.sizeof(AdapterInfoArray))
|
|
self.devices = []
|
|
busNumbers = []
|
|
for adapter in AdapterInfoArray:
|
|
if adapter.iBusNumber not in busNumbers: # filter duplicate device
|
|
self.devices.append(adapter)
|
|
busNumbers.append(adapter.iBusNumber)
|
|
self.iHyperMemorySize = self.get_memory_info2(0).iHyperMemorySize
|
|
|
|
def get_memory_info2(self, adapterIndex: int) -> ADLMemoryInfo2:
|
|
info = ADLMemoryInfo2()
|
|
|
|
if ADL2_Adapter_MemoryInfo2_Get(self.context, adapterIndex, C.byref(info)) != ADL_OK:
|
|
raise RuntimeError("ADL2: Failed to get MemoryInfo2")
|
|
|
|
return info
|
|
|
|
def get_dedicated_vram_usage(self, index: int) -> int:
|
|
usage = C.c_int(-1)
|
|
|
|
if ADL2_Adapter_DedicatedVRAMUsage_Get(self.context, self.devices[index].iAdapterIndex, C.byref(usage)) != ADL_OK:
|
|
raise RuntimeError("ADL2: Failed to get DedicatedVRAMUsage")
|
|
|
|
return usage.value
|
|
|
|
def get_vram_usage(self, index: int) -> int:
|
|
usage = C.c_int(-1)
|
|
|
|
if ADL2_Adapter_VRAMUsage_Get(self.context, self.devices[index].iAdapterIndex, C.byref(usage)) != ADL_OK:
|
|
raise RuntimeError("ADL2: Failed to get VRAMUsage")
|
|
|
|
return usage.value
|