Spaces:
Runtime error
Runtime error
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 | |