Auto controller mode detection for Ally

This commit is contained in:
Serge
2024-01-13 13:24:30 +01:00
parent 772bd8e7a5
commit 6eba7dadea
6 changed files with 150 additions and 25 deletions

View File

@@ -551,6 +551,47 @@ public class Adl2
int iAdapterIndex,
int iEnabled);
// FPS
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_Adapter_FrameMetrics_Start(
IntPtr context,
int iAdapterIndex,
int VidPnSourceId
);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_Adapter_FrameMetrics_Stop(
IntPtr context,
int iAdapterIndex,
int VidPnSourceId
);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_Adapter_FrameMetrics_Get(
IntPtr context,
int iAdapterIndex,
int VidPnSourceId,
out float iFramesPerSecond
);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_FPS_Settings_Get(IntPtr context, int iAdapterIndex, out ADLFPSSettingsOutput lpFPSSettings);
[StructLayout(LayoutKind.Sequential)]
public struct ADLFPSSettingsOutput
{
public int ulSize;
public int bACFPSEnabled;
public int bDCFPSEnabled;
public int ulACFPSCurrent;
public int ulDCFPSCurrent;
public int ulACFPSMaximum;
public int ulACFPSMinimum;
public int ulDCFPSMaximum;
public int ulDCFPSMinimum;
}
// Clocks
[StructLayout(LayoutKind.Sequential)]

View File

@@ -9,7 +9,9 @@ public class AmdGpuControl : IGpuControl
{
private bool _isReady;
private nint _adlContextHandle;
private readonly ADLAdapterInfo _internalDiscreteAdapter;
private readonly ADLAdapterInfo? _iGPU;
public bool IsNvidia => false;
@@ -74,6 +76,8 @@ public class AmdGpuControl : IGpuControl
_isReady = true;
}
_iGPU = FindByType(ADLAsicFamilyType.Integrated);
}
public bool IsValid => _isReady && _adlContextHandle != nint.Zero;
@@ -139,6 +143,29 @@ public class AmdGpuControl : IGpuControl
return true;
}
public void StartFPS()
{
if (_adlContextHandle == nint.Zero || _iGPU == null) return;
ADL2_Adapter_FrameMetrics_Start(_adlContextHandle, ((ADLAdapterInfo)_iGPU).AdapterIndex, 0);
}
public void StopFPS()
{
if (_adlContextHandle == nint.Zero || _iGPU == null) return;
ADL2_Adapter_FrameMetrics_Stop(_adlContextHandle, ((ADLAdapterInfo)_iGPU).AdapterIndex, 0);
}
public float GetFPS()
{
if (_adlContextHandle == nint.Zero || _iGPU == null) return 0;
float fps;
if (ADL2_Adapter_FrameMetrics_Get(_adlContextHandle, ((ADLAdapterInfo)_iGPU).AdapterIndex, 0, out fps) != Adl2.ADL_SUCCESS) return 0;
return fps;
}
public ADLODNPerformanceLevels? GetGPUClocks()
{
if (!IsValid) return null;