public bool Init() { try { var r = AdlNativeMethods.ADL_Main_Control_Create(1); if (r < AdlStatus.ADL_OK) { Write.DevError($"ADL_Main_Control_Create {r.ToString()}"); } if (r >= AdlStatus.ADL_OK) { int numberOfAdapters = 0; r = AdlNativeMethods.ADL_Adapter_NumberOfAdapters_Get(ref numberOfAdapters); if (r < AdlStatus.ADL_OK) { Write.DevError($"{nameof(AdlNativeMethods.ADL_Adapter_NumberOfAdapters_Get)} {r.ToString()}"); } if (numberOfAdapters > 0) { ADLAdapterInfo[] adapterInfo = new ADLAdapterInfo[numberOfAdapters]; if (AdlNativeMethods.ADL_Adapter_AdapterInfo_Get(adapterInfo) >= AdlStatus.ADL_OK) { for (int i = 0; i < numberOfAdapters; i++) { #if DEBUG Write.DevDebug(adapterInfo[i].ToString()); #endif if (!string.IsNullOrEmpty(adapterInfo[i].UDID) && adapterInfo[i].VendorID == AdlConst.ATI_VENDOR_ID) { bool found = false; foreach (ATIGPU gpu in _gpuNames) { if (gpu.BusNumber == adapterInfo[i].BusNumber && gpu.DeviceNumber == adapterInfo[i].DeviceNumber) { found = true; break; } } if (!found) { _gpuNames.Add(new ATIGPU { AdapterName = adapterInfo[i].AdapterName.Trim(), AdapterIndex = adapterInfo[i].AdapterIndex, BusNumber = adapterInfo[i].BusNumber, DeviceNumber = adapterInfo[i].DeviceNumber }); } } } } } r = AdlNativeMethods.ADL2_Main_Control_Create(AdlNativeMethods.Main_Memory_Alloc, 1, ref context); if (r < AdlStatus.ADL_OK) { Write.DevError($"{nameof(AdlNativeMethods.ADL2_Main_Control_Create)} {r.ToString()}"); } } _gpuNames = _gpuNames.OrderBy(a => a.BusNumber).ToList(); #if DEBUG Write.DevDebug(string.Join(",", _gpuNames.Select(a => a.AdapterIndex))); #endif } catch { return(false); } return(true); }