public ulong GetTotalMemory(int gpuIndex) { int adapterIndex = GpuIndexToAdapterIndex(_gpuNames, gpuIndex); ADLMemoryInfo adlt = new ADLMemoryInfo(); if (ADL.ADL_Adapter_MemoryInfo_Get(adapterIndex, ref adlt) == ADL.ADL_OK) { return(adlt.MemorySize); } else { return(0); } }
public uint GetPowerUsageByIndex(int gpuIndex) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); int power = 0; try { if (ADL.ADL2_Overdrive6_CurrentPower_Get(context, adapterIndex, 0, ref power) == ADL.ADL_OK) { return((uint)(power / 256.0)); } } catch { } return(0); }
public int GetTemperatureByIndex(int gpuIndex) { int adapterIndex = GpuIndexToAdapterIndex(_gpuNames, gpuIndex); ADLTemperature adlt = new ADLTemperature(); if (ADL.ADL_Overdrive5_Temperature_Get(adapterIndex, 0, ref adlt) == ADL.ADL_OK) { return((int)(0.001f * adlt.Temperature)); } else { return(0); } }
public void SetFunSpeedByIndex(int gpuIndex, int value) { try { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLFanSpeedValue adlf = new ADLFanSpeedValue { SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT }; if (ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0, ref adlf) == ADL.ADL_OK) { adlf.FanSpeed = value; ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0, ref adlf); } } catch { } }
public uint GetFanSpeedByIndex(int gpuIndex) { int adapterIndex = GpuIndexToAdapterIndex(_gpuNames, gpuIndex); ADLFanSpeedValue adlf = new ADLFanSpeedValue(); adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT; if (ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0, ref adlf) == ADL.ADL_OK) { return((uint)adlf.FanSpeed); } else { return(0); } }
public void SetSystemClockByIndex(int gpuIndex, int value) { try { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPerformanceLevelsX2 lpODPerformanceLevels = ADLODNPerformanceLevelsX2.Create(); var result = ADL.ADL2_OverdriveN_SystemClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels); lpODPerformanceLevels.iMode = ADL.ODNControlType_Default; result = ADL.ADL2_OverdriveN_SystemClocksX2_Set(context, adapterIndex, ref lpODPerformanceLevels); result = ADL.ADL2_OverdriveN_SystemClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels); #if DEBUG Write.DevWarn("ADL2_OverdriveN_SystemClocksX2_Get result=" + result); foreach (var item in lpODPerformanceLevels.aLevels) { Write.DevWarn($"iClock={item.iClock},iControl={item.iControl},iEnabled={item.iEnabled},iVddc={item.iVddc}"); } #endif if (result == ADL.ADL_OK) { if (value <= 0) { return; } else { lpODPerformanceLevels.iMode = ADL.ODNControlType_Manual; int index = 0; for (int i = 0; i < lpODPerformanceLevels.aLevels.Length; i++) { if (lpODPerformanceLevels.aLevels[i].iEnabled == 1) { index = i; } } lpODPerformanceLevels.aLevels[index].iClock = value * 100; } result = ADL.ADL2_OverdriveN_SystemClocksX2_Set(context, adapterIndex, ref lpODPerformanceLevels); #if DEBUG if (result != ADL.ADL_OK) { Write.DevWarn($"ADL2_OverdriveN_SystemClocksX2_Set({value * 100}) result " + result); } #endif } } catch { } }
public int GetTempLimitByIndex(int gpuIndex) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPowerLimitSetting lpODPowerLimit = new ADLODNPowerLimitSetting(); try { int result = ADL.ADL2_OverdriveN_PowerLimit_Get(context, adapterIndex, ref lpODPowerLimit); if (result == ADL.ADL_OK) { return(lpODPowerLimit.iMaxOperatingTemperature); } return(0); } catch { return(0); } }
public void SetTempLimitByIndex(int gpuIndex, int value) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPowerLimitSetting lpODPowerLimit = new ADLODNPowerLimitSetting(); try { int result = ADL.ADL2_OverdriveN_PowerLimit_Get(context, adapterIndex, ref lpODPowerLimit); if (result == ADL.ADL_OK) { lpODPowerLimit.iMode = ADL.ODNControlType_Manual; lpODPowerLimit.iMaxOperatingTemperature = value; ADL.ADL2_OverdriveN_PowerLimit_Set(context, adapterIndex, ref lpODPowerLimit); } } catch { } }
public int GetMemoryClockByIndex(int gpuIndex) { try { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPerformanceLevelsX2 lpODPerformanceLevels = ADLODNPerformanceLevelsX2.Create(); var result = ADL.ADL2_OverdriveN_MemoryClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels); foreach (var level in lpODPerformanceLevels.aLevels) { if (level.iControl == 7) { return(level.iClock * 10); } } return(0); } catch { return(0); } }
public int GetSystemClockByIndex(int gpuIndex) { try { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPerformanceLevelsX2 lpODPerformanceLevels = ADLODNPerformanceLevelsX2.Create(); var result = ADL.ADL2_OverdriveN_SystemClocksX2_Get(context, adapterIndex, ref lpODPerformanceLevels); int index = 0; for (int i = 0; i < lpODPerformanceLevels.aLevels.Length; i++) { if (lpODPerformanceLevels.aLevels[i].iEnabled != 0) { index = i; } } return(lpODPerformanceLevels.aLevels[index].iClock * 10); } catch { return(0); } }
public void SetPowerLimitByIndex(int gpuIndex, int value) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPowerLimitSetting lpODPowerLimit = new ADLODNPowerLimitSetting(); try { int result = ADL.ADL2_OverdriveN_PowerLimit_Get(context, adapterIndex, ref lpODPowerLimit); #if DEBUG Write.DevWarn($"ADL2_OverdriveN_PowerLimit_Get result={result},iMode={lpODPowerLimit.iMode},iTDPLimit={lpODPowerLimit.iTDPLimit},iMaxOperatingTemperature={lpODPowerLimit.iMaxOperatingTemperature}"); #endif if (result == ADL.ADL_OK) { lpODPowerLimit.iMode = ADL.ODNControlType_Manual; lpODPowerLimit.iTDPLimit = value - 100; ADL.ADL2_OverdriveN_PowerLimit_Set(context, adapterIndex, ref lpODPowerLimit); } } catch (Exception e) { Logger.ErrorDebugLine(e); } }
public void SetTempLimitByIndex(int gpuIndex, int value) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNPowerLimitSetting lpODPowerLimit = new ADLODNPowerLimitSetting(); try { int result = ADL.ADL2_OverdriveN_PowerLimit_Get(context, adapterIndex, ref lpODPowerLimit); if (result == ADL.ADL_OK) { if (value == 0) { ADLODNCapabilitiesX2 lpODCapabilities = new ADLODNCapabilitiesX2(); result = ADL.ADL2_OverdriveN_CapabilitiesX2_Get(context, adapterIndex, ref lpODCapabilities); value = lpODCapabilities.powerTuneTemperature.iDefault; } lpODPowerLimit.iMode = ADL.ODNControlType_Manual; lpODPowerLimit.iMaxOperatingTemperature = value; ADL.ADL2_OverdriveN_PowerLimit_Set(context, adapterIndex, ref lpODPowerLimit); } } catch (Exception e) { Logger.ErrorDebugLine(e); } }
public void GetClockRangeByIndex( int gpuIndex, out int coreClockDeltaMin, out int coreClockDeltaMax, out int memoryClockDeltaMin, out int memoryClockDeltaMax, out int powerMin, out int powerMax, out int tempLimitMin, out int tempLimitMax, out int tempLimitDefault) { int adapterIndex = GpuIndexToAdapterIndex(gpuIndex); ADLODNCapabilitiesX2 lpODCapabilities = new ADLODNCapabilitiesX2(); var result = ADL.ADL2_OverdriveN_CapabilitiesX2_Get(context, adapterIndex, ref lpODCapabilities); coreClockDeltaMin = lpODCapabilities.sEngineClockRange.iMin * 10; coreClockDeltaMax = lpODCapabilities.sEngineClockRange.iMax * 10; memoryClockDeltaMin = lpODCapabilities.sMemoryClockRange.iMin * 10; memoryClockDeltaMax = lpODCapabilities.sMemoryClockRange.iMax * 10; powerMin = lpODCapabilities.power.iMin + 100; powerMax = lpODCapabilities.power.iMax + 100; tempLimitMin = lpODCapabilities.powerTuneTemperature.iMin; tempLimitMax = lpODCapabilities.powerTuneTemperature.iMax; tempLimitDefault = lpODCapabilities.powerTuneTemperature.iDefault; #if DEBUG Write.DevWarn($"ADL2_OverdriveN_CapabilitiesX2_Get result {result} coreClockDeltaMin={coreClockDeltaMin},coreClockDeltaMax={coreClockDeltaMax},memoryClockDeltaMin={memoryClockDeltaMin},memoryClockDeltaMax={memoryClockDeltaMax}"); #endif }
public bool Init() { try { if (Environment.Is64BitOperatingSystem) { Windows.NativeMethods.SetDllDirectory(SpecialPath.ThisSystem32Dir); } else { Windows.NativeMethods.SetDllDirectory(SpecialPath.ThisSysWOW64Dir); } int status = ADL.ADL_Main_Control_Create(1); #if DEBUG Write.DevDebug("AMD Display Library Status: " + (status == ADL.ADL_OK ? "OK" : status.ToString())); #endif if (status == ADL.ADL_OK) { int numberOfAdapters = 0; ADL.ADL_Adapter_NumberOfAdapters_Get(ref numberOfAdapters); if (numberOfAdapters > 0) { ADLAdapterInfo[] adapterInfo = new ADLAdapterInfo[numberOfAdapters]; if (ADL.ADL_Adapter_AdapterInfo_Get(adapterInfo) == ADL.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 == ADL.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 }); } } } } } ADL.ADL2_Main_Control_Create(ADL.Main_Memory_Alloc, 1, ref context); } _gpuNames = _gpuNames.OrderBy(a => a.BusNumber).ToList(); #if DEBUG Write.DevDebug(string.Join(",", _gpuNames.Select(a => a.AdapterIndex))); #endif } catch { return(false); } return(true); }