mirror of
https://github.com/ayufan/steam-deck-tools.git
synced 2026-01-28 19:24:22 +01:00
WIP
This commit is contained in:
parent
bbd912eeeb
commit
4899325fa4
|
|
@ -90,6 +90,15 @@ namespace PowerControl.Helpers.AMD
|
|||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)ADL.ADL_MAX_ADAPTERS)]
|
||||
internal ADLAdapterInfo[] ADLAdapterInfo;
|
||||
}
|
||||
|
||||
/// <summary> ADLAdapterInfo Array</summary>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct ADLDisplayModeInfoArray
|
||||
{
|
||||
/// <summary> ADLAdapterInfo Array </summary>
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)ADL.ADL_MAX_OVERRIDES)]
|
||||
internal ADLDisplayModeInfo[] ADLDisplayModeInfo;
|
||||
}
|
||||
#endregion ADLAdapterInfo
|
||||
|
||||
#region ADLDisplayInfo
|
||||
|
|
@ -164,8 +173,8 @@ namespace PowerControl.Helpers.AMD
|
|||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct ADLDisplayModeX2
|
||||
{
|
||||
internal int PelsHeight;
|
||||
internal int PelsWidth;
|
||||
internal int PelsHeight;
|
||||
internal int ScanType;
|
||||
internal int RefreshRate;
|
||||
internal int TimingStandard;
|
||||
|
|
@ -240,6 +249,7 @@ namespace PowerControl.Helpers.AMD
|
|||
internal const int ADL_MAX_DISPLAYS = 40 /* 150 */;
|
||||
/// <summary> Define the maximum device name length</summary>
|
||||
internal const int ADL_MAX_DEVICENAME = 32;
|
||||
internal const int ADL_MAX_OVERRIDES = 120;
|
||||
/// <summary> Define the successful</summary>
|
||||
internal const int ADL_SUCCESS = 0;
|
||||
/// <summary> Define the failure</summary>
|
||||
|
|
@ -347,6 +357,9 @@ namespace PowerControl.Helpers.AMD
|
|||
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
internal static extern int ADL2_Display_ModeTimingOverride_Set(IntPtr context, int adapterIndex, int displayIndex, ref ADLDisplayModeInfo lpMode, int iForceUpdate);
|
||||
|
||||
[DllImport(Atiadlxx_FileName)]
|
||||
internal static extern int ADL2_Display_ModeTimingOverrideList_Get(IntPtr context, int adapterIndex, int displayIndex, int maxOverrides, out ADLDisplayModeInfoArray modes, out int modesCount);
|
||||
#endregion DLLImport
|
||||
|
||||
#region ADL_Main_Memory_Alloc
|
||||
|
|
|
|||
|
|
@ -6,7 +6,34 @@ namespace PowerControl.Helpers.AMD
|
|||
{
|
||||
internal static bool AddAndSetTiming(ADLDisplayModeX2 displayMode)
|
||||
{
|
||||
return AddTiming(displayMode) && SetTiming(displayMode);
|
||||
RemoveTiming(displayMode);
|
||||
return AddTiming(displayMode);
|
||||
}
|
||||
|
||||
internal static IEnumerable<ADLDisplayModeInfo>? GetAllModes()
|
||||
{
|
||||
return Helpers.AMD.ADLContext.WithSafe((context) =>
|
||||
{
|
||||
int res = ADL.ADL2_Display_ModeTimingOverrideList_Get(context.Context,
|
||||
Helpers.AMD.ADL.ADL_DEFAULT_ADAPTER, 0,
|
||||
ADL.ADL_MAX_OVERRIDES, out var modes, out var modesCount);
|
||||
if (res != 0)
|
||||
return null;
|
||||
|
||||
return modes.ADLDisplayModeInfo.Take(modesCount);
|
||||
});
|
||||
}
|
||||
|
||||
internal static bool ReplaceTiming(ADLDisplayModeX2 displayMode)
|
||||
{
|
||||
RemoveTiming(displayMode);
|
||||
return AddTiming(displayMode);
|
||||
}
|
||||
|
||||
internal static bool RemoveTiming(ADLDisplayModeX2 displayMode)
|
||||
{
|
||||
displayMode.TimingStandard = Helpers.AMD.ADL.ADL_DL_MODETIMING_STANDARD_DRIVER_DEFAULT;
|
||||
return AddTiming(displayMode);
|
||||
}
|
||||
|
||||
internal static bool AddTiming(ADLDisplayModeX2 displayMode)
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ namespace PowerControl.Helpers
|
|||
DEVMODE? best = FindAllDisplaySettings()
|
||||
.Where((dm) => dm.dmPelsWidth == current.Value.dmPelsWidth && dm.dmPelsHeight == current.Value.dmPelsHeight)
|
||||
.Where((dm) => dm.dmDisplayFrequency == hz)
|
||||
.First();
|
||||
.FirstOrDefault();
|
||||
|
||||
if (best is null)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,9 @@ namespace PowerControl.Options
|
|||
if (currentResolution == null)
|
||||
return null;
|
||||
|
||||
ModeTiming.AddAndSetTiming(new Helpers.AMD.ADLDisplayModeX2()
|
||||
var modes = ModeTiming.GetAllModes();
|
||||
|
||||
ModeTiming.ReplaceTiming(new Helpers.AMD.ADLDisplayModeX2()
|
||||
{
|
||||
PelsWidth = currentResolution.Value.Width,
|
||||
PelsHeight = currentResolution.Value.Height,
|
||||
|
|
@ -42,10 +44,8 @@ namespace PowerControl.Options
|
|||
TimingStandard = Helpers.AMD.ADL.ADL_DL_MODETIMING_STANDARD_CVT,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayResolutionController.SetRefreshRate(selectedRefreshRate);
|
||||
}
|
||||
|
||||
DisplayResolutionController.SetRefreshRate(selectedRefreshRate);
|
||||
|
||||
return DisplayResolutionController.GetRefreshRate().ToString();
|
||||
},
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace PowerControl.Options
|
|||
|
||||
if (ExternalHelpers.DisplayConfig.IsInternalConnected == true)
|
||||
{
|
||||
ModeTiming.AddTiming(new Helpers.AMD.ADLDisplayModeX2()
|
||||
ModeTiming.ReplaceTiming(new Helpers.AMD.ADLDisplayModeX2()
|
||||
{
|
||||
PelsWidth = selectedResolution.Width,
|
||||
PelsHeight = selectedResolution.Height,
|
||||
|
|
@ -43,10 +43,8 @@ namespace PowerControl.Options
|
|||
TimingStandard = Helpers.AMD.ADL.ADL_DL_MODETIMING_STANDARD_CVT,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayResolutionController.SetResolution(selectedResolution);
|
||||
}
|
||||
|
||||
DisplayResolutionController.SetResolution(selectedResolution);
|
||||
|
||||
return DisplayResolutionController.GetResolution().ToString();
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in a new issue