From 0fd00e27bb806f7ca29081125e5e58371bda841e Mon Sep 17 00:00:00 2001 From: javguit <63629902+javguit@users.noreply.github.com> Date: Fri, 10 Sep 2021 06:02:39 -0300 Subject: [PATCH] Fixed compatibility with older AMD/ATI cards when calling ADL2_Adapter_FrameMetrics_Caps (#535) --- LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs | 2 +- LibreHardwareMonitorLib/Interop/AtiAdlxx.cs | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs index 5ca4e17..7d6ca05 100644 --- a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs @@ -131,7 +131,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu int enabled = 0; int version = 0; - if (AtiAdlxx.ADL2_Adapter_FrameMetrics_Caps(_context, _adapterIndex, ref supported) == AtiAdlxx.ADLStatus.ADL_OK) + if (AtiAdlxx.ADL_Method_Exists("ADL2_Adapter_FrameMetrics_Caps") && AtiAdlxx.ADL2_Adapter_FrameMetrics_Caps(_context, _adapterIndex, ref supported) == AtiAdlxx.ADLStatus.ADL_OK) { if (supported == AtiAdlxx.ADL_TRUE && AtiAdlxx.ADL2_Adapter_FrameMetrics_Start(_context, _adapterIndex, 0) == AtiAdlxx.ADLStatus.ADL_OK) { diff --git a/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs b/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs index e4a56c8..4f6abc5 100644 --- a/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs +++ b/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs @@ -130,7 +130,19 @@ namespace LibreHardwareMonitor.Interop public static extern ADLStatus ADL2_Adapter_FrameMetrics_Start(IntPtr context, int adapterIndex, int displayIndex); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)] - public static extern ADLStatus ADL2_Adapter_FrameMetrics_Stop(IntPtr context, int adapterIndex, int displayIndex); + public static extern ADLStatus ADL2_Adapter_FrameMetrics_Stop(IntPtr context, int adapterIndex, int displayIndex); + + public static bool ADL_Method_Exists(string ADL_Method) + { + IntPtr module = Kernel32.LoadLibrary(DllName); + if (module != IntPtr.Zero) + { + bool result = Kernel32.GetProcAddress(module, ADL_Method) != IntPtr.Zero; + Kernel32.FreeLibrary(module); + return result; + } + return false; + } public static ADLStatus ADL_Main_Control_Create(int enumConnectedAdapters) {