diff --git a/app/AsusACPI.cs b/app/AsusACPI.cs
index e545062f..48118eb2 100644
--- a/app/AsusACPI.cs
+++ b/app/AsusACPI.cs
@@ -105,6 +105,9 @@ public class AsusACPI
public const uint CORES_CPU = 0x001200D2; // Intel E-core and P-core configuration in a format 0x0[E]0[P]
public const uint CORES_MAX = 0x001200D3; // Maximum Intel E-core and P-core availability
+ public const uint GPU_BASE = 0x00120099; // Base part GPU TGP
+ public const uint GPU_POWER = 0x00120098; // Additonal part of GPU TGP
+
public const int APU_MEM = 0x000600C1;
public const int TUF_KB_BRIGHTNESS = 0x00050021;
@@ -150,6 +153,9 @@ public class AsusACPI
public const int MinGPUBoost = 5;
public static int MaxGPUBoost = 25;
+ public static int MinGPUPower = 0;
+ public static int MaxGPUPower = 50;
+
public const int MinGPUTemp = 75;
public const int MaxGPUTemp = 87;
@@ -285,6 +291,7 @@ public class AsusACPI
if (AppConfig.IsIntelHX())
{
MaxTotal = 175;
+ MaxGPUPower = 70;
}
if (AppConfig.DynamicBoost5())
diff --git a/app/Display/ScreenNative.cs b/app/Display/ScreenNative.cs
index 0b260fd3..e2346aaa 100644
--- a/app/Display/ScreenNative.cs
+++ b/app/Display/ScreenNative.cs
@@ -42,6 +42,12 @@ namespace GHelper.Display
[DllImport("gdi32")]
internal static extern bool GetDeviceGammaRamp(IntPtr dcHandle, ref GammaRamp ramp);
+ [DllImport("gdi32", CharSet = CharSet.Unicode)]
+ internal static extern bool SetICMProfileW(IntPtr dcHandle, string lpFileName);
+
+ [DllImport("gdi32", CharSet = CharSet.Unicode)]
+ internal static extern bool SetICMMode(IntPtr dcHandle, int mode);
+
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DEVMODE
{
diff --git a/app/Extra.cs b/app/Extra.cs
index 7725d680..b59715e9 100644
--- a/app/Extra.cs
+++ b/app/Extra.cs
@@ -398,17 +398,19 @@ namespace GHelper
InitServices();
InitHibernate();
- //InitACPITesting();
+ InitACPITesting();
}
private void InitACPITesting()
{
+ if (!AppConfig.Is("debug")) return;
+
pictureScan.Visible = true;
panelACPI.Visible = true;
- textACPICommand.Text = "120075";
- textACPIParam.Text = "1";
+ textACPICommand.Text = "120098";
+ textACPIParam.Text = "25";
buttonACPISend.Click += ButtonACPISend_Click;
pictureScan.Click += PictureScan_Click;
diff --git a/app/Fans.Designer.cs b/app/Fans.Designer.cs
index 8b653e1c..a1025051 100644
--- a/app/Fans.Designer.cs
+++ b/app/Fans.Designer.cs
@@ -119,6 +119,10 @@ namespace GHelper
picturePowerMode = new PictureBox();
labelPowerModeTitle = new Label();
panelGPU = new Panel();
+ panelGPUPower = new Panel();
+ labelGPUPower = new Label();
+ labelGPUPowerTitle = new Label();
+ trackGPUPower = new TrackBar();
panelGPUTemp = new Panel();
labelGPUTemp = new Label();
labelGPUTempTitle = new Label();
@@ -190,6 +194,8 @@ namespace GHelper
panelPowerModeTItle.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picturePowerMode).BeginInit();
panelGPU.SuspendLayout();
+ panelGPUPower.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)trackGPUPower).BeginInit();
panelGPUTemp.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUTemp).BeginInit();
panelGPUBoost.SuspendLayout();
@@ -533,7 +539,7 @@ namespace GHelper
panelAdvanced.Controls.Add(panelTitleTemp);
panelAdvanced.Controls.Add(panelDownload);
panelAdvanced.Dock = DockStyle.Top;
- panelAdvanced.Location = new Point(10, 1644);
+ panelAdvanced.Location = new Point(10, 1768);
panelAdvanced.Name = "panelAdvanced";
panelAdvanced.Size = new Size(520, 992);
panelAdvanced.TabIndex = 14;
@@ -864,7 +870,7 @@ namespace GHelper
panelPower.Controls.Add(panelPowerMode);
panelPower.Controls.Add(panelPowerModeTItle);
panelPower.Dock = DockStyle.Top;
- panelPower.Location = new Point(10, 764);
+ panelPower.Location = new Point(10, 888);
panelPower.Margin = new Padding(4);
panelPower.Name = "panelPower";
panelPower.Size = new Size(520, 880);
@@ -1237,6 +1243,7 @@ namespace GHelper
panelGPU.AutoSize = true;
panelGPU.Controls.Add(panelGPUTemp);
panelGPU.Controls.Add(panelGPUBoost);
+ panelGPU.Controls.Add(panelGPUPower);
panelGPU.Controls.Add(panelGPUMemory);
panelGPU.Controls.Add(panelGPUCore);
panelGPU.Controls.Add(panelGPUClockLimit);
@@ -1246,10 +1253,59 @@ namespace GHelper
panelGPU.Margin = new Padding(4);
panelGPU.Name = "panelGPU";
panelGPU.Padding = new Padding(0, 0, 0, 18);
- panelGPU.Size = new Size(520, 698);
+ panelGPU.Size = new Size(520, 822);
panelGPU.TabIndex = 44;
panelGPU.Visible = false;
//
+ // panelGPUPower
+ //
+ panelGPUPower.AutoSize = true;
+ panelGPUPower.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ panelGPUPower.Controls.Add(labelGPUPower);
+ panelGPUPower.Controls.Add(labelGPUPowerTitle);
+ panelGPUPower.Controls.Add(trackGPUPower);
+ panelGPUPower.Dock = DockStyle.Top;
+ panelGPUPower.Location = new Point(0, 432);
+ panelGPUPower.Margin = new Padding(4);
+ panelGPUPower.MaximumSize = new Size(0, 124);
+ panelGPUPower.Name = "panelGPUPower";
+ panelGPUPower.Size = new Size(520, 124);
+ panelGPUPower.TabIndex = 49;
+ //
+ // labelGPUPower
+ //
+ labelGPUPower.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
+ labelGPUPower.Location = new Point(374, 14);
+ labelGPUPower.Margin = new Padding(4, 0, 4, 0);
+ labelGPUPower.Name = "labelGPUPower";
+ labelGPUPower.Size = new Size(124, 32);
+ labelGPUPower.TabIndex = 44;
+ labelGPUPower.Text = "105W";
+ labelGPUPower.TextAlign = ContentAlignment.TopRight;
+ //
+ // labelGPUPowerTitle
+ //
+ labelGPUPowerTitle.AutoSize = true;
+ labelGPUPowerTitle.Location = new Point(10, 14);
+ labelGPUPowerTitle.Margin = new Padding(4, 0, 4, 0);
+ labelGPUPowerTitle.Name = "labelGPUPowerTitle";
+ labelGPUPowerTitle.Size = new Size(130, 32);
+ labelGPUPowerTitle.TabIndex = 43;
+ labelGPUPowerTitle.Text = "GPU Power";
+ //
+ // trackGPUPower
+ //
+ trackGPUPower.Location = new Point(6, 48);
+ trackGPUPower.Margin = new Padding(4, 2, 4, 2);
+ trackGPUPower.Maximum = 25;
+ trackGPUPower.Minimum = 5;
+ trackGPUPower.Name = "trackGPUPower";
+ trackGPUPower.Size = new Size(496, 90);
+ trackGPUPower.TabIndex = 42;
+ trackGPUPower.TickFrequency = 5;
+ trackGPUPower.TickStyle = TickStyle.TopLeft;
+ trackGPUPower.Value = 25;
+ //
// panelGPUTemp
//
panelGPUTemp.AutoSize = true;
@@ -1258,7 +1314,7 @@ namespace GHelper
panelGPUTemp.Controls.Add(labelGPUTempTitle);
panelGPUTemp.Controls.Add(trackGPUTemp);
panelGPUTemp.Dock = DockStyle.Top;
- panelGPUTemp.Location = new Point(0, 556);
+ panelGPUTemp.Location = new Point(0, 680);
panelGPUTemp.Margin = new Padding(4);
panelGPUTemp.MaximumSize = new Size(0, 124);
panelGPUTemp.Name = "panelGPUTemp";
@@ -1307,7 +1363,7 @@ namespace GHelper
panelGPUBoost.Controls.Add(labelGPUBoostTitle);
panelGPUBoost.Controls.Add(trackGPUBoost);
panelGPUBoost.Dock = DockStyle.Top;
- panelGPUBoost.Location = new Point(0, 432);
+ panelGPUBoost.Location = new Point(0, 556);
panelGPUBoost.Margin = new Padding(4);
panelGPUBoost.MaximumSize = new Size(0, 124);
panelGPUBoost.Name = "panelGPUBoost";
@@ -1700,6 +1756,9 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)picturePowerMode).EndInit();
panelGPU.ResumeLayout(false);
panelGPU.PerformLayout();
+ panelGPUPower.ResumeLayout(false);
+ panelGPUPower.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)trackGPUPower).EndInit();
panelGPUTemp.ResumeLayout(false);
panelGPUTemp.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUTemp).EndInit();
@@ -1833,5 +1892,9 @@ namespace GHelper
private TrackBar trackSlow;
private Panel panelDownload;
private RButton buttonDownload;
+ private Panel panelGPUPower;
+ private Label labelGPUPower;
+ private Label labelGPUPowerTitle;
+ private TrackBar trackGPUPower;
}
}
\ No newline at end of file
diff --git a/app/Fans.cs b/app/Fans.cs
index 796a02c7..793de7f0 100644
--- a/app/Fans.cs
+++ b/app/Fans.cs
@@ -31,6 +31,8 @@ namespace GHelper
FanSensorControl fanSensorControl;
+ static int gpuPowerBase = 0;
+
public Fans()
{
@@ -144,17 +146,22 @@ namespace GHelper
trackGPUTemp.Minimum = AsusACPI.MinGPUTemp;
trackGPUTemp.Maximum = AsusACPI.MaxGPUTemp;
+ trackGPUPower.Minimum = AsusACPI.MinGPUPower;
+ trackGPUPower.Maximum = AsusACPI.MaxGPUPower;
+
trackGPUClockLimit.Scroll += trackGPUClockLimit_Scroll;
trackGPUCore.Scroll += trackGPU_Scroll;
trackGPUMemory.Scroll += trackGPU_Scroll;
trackGPUBoost.Scroll += trackGPUPower_Scroll;
trackGPUTemp.Scroll += trackGPUPower_Scroll;
+ trackGPUPower.Scroll += trackGPUPower_Scroll;
trackGPUCore.MouseUp += TrackGPU_MouseUp;
trackGPUMemory.MouseUp += TrackGPU_MouseUp;
trackGPUBoost.MouseUp += TrackGPU_MouseUp;
trackGPUTemp.MouseUp += TrackGPU_MouseUp;
+ trackGPUPower.MouseUp += TrackGPU_MouseUp;
trackGPUClockLimit.MouseUp += TrackGPU_MouseUp;
@@ -541,8 +548,12 @@ namespace GHelper
{
gpuVisible = buttonGPU.Visible = true;
+ gpuPowerBase = Program.acpi.DeviceGet(AsusACPI.GPU_BASE);
+ int gpuPowerVar = Program.acpi.DeviceGet(AsusACPI.GPU_POWER);
+
int gpu_boost = AppConfig.GetMode("gpu_boost");
int gpu_temp = AppConfig.GetMode("gpu_temp");
+ int gpu_power = AppConfig.GetMode("gpu_power");
int core = AppConfig.GetMode("gpu_core");
int memory = AppConfig.GetMode("gpu_memory");
@@ -550,32 +561,35 @@ namespace GHelper
if (gpu_boost < 0) gpu_boost = AsusACPI.MaxGPUBoost;
if (gpu_temp < 0) gpu_temp = AsusACPI.MaxGPUTemp;
+ if (gpu_power < 0) gpu_power = (gpuPowerVar >= 0) ? gpuPowerVar : AsusACPI.MaxGPUPower;
if (core == -1) core = 0;
if (memory == -1) memory = 0;
if (clock_limit == -1) clock_limit = NvidiaGpuControl.MaxClockLimit;
- if (nvControl.GetClocks(out int current_core, out int current_memory))
+ if (nvControl is not null)
{
- core = current_core;
- memory = current_memory;
+ if (nvControl.GetClocks(out int current_core, out int current_memory))
+ {
+ core = current_core;
+ memory = current_memory;
+ }
+
+ int _clockLimit = nvControl.GetMaxGPUCLock();
+
+ if (_clockLimit == 0) clock_limit = NvidiaGpuControl.MaxClockLimit;
+ else if (_clockLimit > 0) clock_limit = _clockLimit;
+
+ try
+ {
+ labelGPU.Text = nvControl.FullName;
+ }
+ catch
+ {
+
+ }
}
- int _clockLimit = nvControl.GetMaxGPUCLock();
-
- if (_clockLimit == 0) clock_limit = NvidiaGpuControl.MaxClockLimit;
- else if (_clockLimit > 0) clock_limit = _clockLimit;
-
- try
- {
- labelGPU.Text = nvControl.FullName;
- }
- catch
- {
-
- }
-
- //}
trackGPUClockLimit.Value = Math.Max(Math.Min(clock_limit, NvidiaGpuControl.MaxClockLimit), NvidiaGpuControl.MinClockLimit);
trackGPUCore.Value = Math.Max(Math.Min(core, NvidiaGpuControl.MaxCoreOffset), NvidiaGpuControl.MinCoreOffset);
@@ -584,9 +598,13 @@ namespace GHelper
trackGPUBoost.Value = Math.Max(Math.Min(gpu_boost, AsusACPI.MaxGPUBoost), AsusACPI.MinGPUBoost);
trackGPUTemp.Value = Math.Max(Math.Min(gpu_temp, AsusACPI.MaxGPUTemp), AsusACPI.MinGPUTemp);
+ trackGPUPower.Value = Math.Max(Math.Min(gpu_power, AsusACPI.MaxGPUPower), AsusACPI.MinGPUPower);
+
panelGPUBoost.Visible = (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0);
panelGPUTemp.Visible = (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0);
+ panelGPUPower.Visible = gpuPowerBase > 0 && gpuPowerVar >= 0;
+
VisualiseGPUSettings();
}
@@ -610,6 +628,9 @@ namespace GHelper
labelGPUClockLimit.Text = "Default";
else
labelGPUClockLimit.Text = $"{trackGPUClockLimit.Value} MHz";
+
+ labelGPUPower.Text = (gpuPowerBase + trackGPUPower.Value) + "W";
+
}
private void trackGPUClockLimit_Scroll(object? sender, EventArgs e)
@@ -640,6 +661,7 @@ namespace GHelper
{
AppConfig.SetMode("gpu_boost", trackGPUBoost.Value);
AppConfig.SetMode("gpu_temp", trackGPUTemp.Value);
+ AppConfig.SetMode("gpu_power", trackGPUPower.Value);
VisualiseGPUSettings();
}
@@ -1089,19 +1111,24 @@ namespace GHelper
if (gpuVisible)
{
+ int gpuPowerVar = Program.acpi.DeviceGet(AsusACPI.GPU_POWER);
+
trackGPUClockLimit.Value = NvidiaGpuControl.MaxClockLimit;
trackGPUCore.Value = 0;
trackGPUMemory.Value = 0;
+
trackGPUBoost.Value = AsusACPI.MaxGPUBoost;
trackGPUTemp.Value = AsusACPI.MaxGPUTemp;
-
- AppConfig.SetMode("gpu_clock_limit", trackGPUClockLimit.Value);
+ trackGPUPower.Value = (gpuPowerVar >= 0) ? gpuPowerVar : AsusACPI.MaxGPUPower;
AppConfig.SetMode("gpu_boost", trackGPUBoost.Value);
AppConfig.SetMode("gpu_temp", trackGPUTemp.Value);
- AppConfig.SetMode("gpu_core", trackGPUCore.Value);
- AppConfig.SetMode("gpu_memory", trackGPUMemory.Value);
+ AppConfig.RemoveMode("gpu_power");
+
+ AppConfig.RemoveMode("gpu_clock_limit");
+ AppConfig.RemoveMode("gpu_core");
+ AppConfig.RemoveMode("gpu_memory");
VisualiseGPUSettings();
modeControl.SetGPUClocks(true);
diff --git a/app/GHelper.csproj b/app/GHelper.csproj
index 56011b39..b49204c7 100644
--- a/app/GHelper.csproj
+++ b/app/GHelper.csproj
@@ -15,7 +15,7 @@
AnyCPU
False
True
- 0.155
+ 0.156
diff --git a/app/Mode/ModeControl.cs b/app/Mode/ModeControl.cs
index cb43f672..0d22adf9 100644
--- a/app/Mode/ModeControl.cs
+++ b/app/Mode/ModeControl.cs
@@ -346,18 +346,20 @@ namespace GHelper.Mode
int gpu_boost = AppConfig.GetMode("gpu_boost");
int gpu_temp = AppConfig.GetMode("gpu_temp");
+ int gpu_power = AppConfig.GetMode("gpu_power");
int boostResult = -1;
- if (gpu_boost < AsusACPI.MinGPUBoost || gpu_boost > AsusACPI.MaxGPUBoost) return;
- if (gpu_temp < AsusACPI.MinGPUTemp || gpu_temp > AsusACPI.MaxGPUTemp) return;
+ if (gpu_power >= AsusACPI.MinGPUPower && gpu_power <= AsusACPI.MaxGPUPower && Program.acpi.DeviceGet(AsusACPI.GPU_POWER) >= 0)
+ Program.acpi.DeviceSet(AsusACPI.GPU_POWER, gpu_power, "PowerLimit TGP (GPU VAR)");
- if (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0)
- boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0");
+ if (gpu_boost >= AsusACPI.MinGPUBoost && gpu_boost <= AsusACPI.MaxGPUBoost && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0)
+ boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0 (GPU BOOST)");
- if (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0)
- Program.acpi.DeviceSet(AsusACPI.PPT_GPUC2, gpu_temp, "PowerLimit C2");
+ if (gpu_temp >= AsusACPI.MinGPUTemp && gpu_temp <= AsusACPI.MaxGPUTemp && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0)
+ Program.acpi.DeviceSet(AsusACPI.PPT_GPUC2, gpu_temp, "PowerLimit C2 (GPU TEMP)");
+ // Fallback
if (boostResult == 0)
Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0");
diff --git a/app/Updates.cs b/app/Updates.cs
index 428466e6..29af78f4 100644
--- a/app/Updates.cs
+++ b/app/Updates.cs
@@ -83,13 +83,12 @@ namespace GHelper
InitializeComponent();
InitTheme(true);
- LoadUpdates(true);
-
//buttonRefresh.Visible = false;
buttonRefresh.Click += ButtonRefresh_Click;
Shown += Updates_Shown;
}
+
private void ButtonRefresh_Click(object? sender, EventArgs e)
{
LoadUpdates();
@@ -100,7 +99,9 @@ namespace GHelper
Height = Program.settingsForm.Height;
Top = Program.settingsForm.Top;
Left = Program.settingsForm.Left - Width - 5;
+ LoadUpdates(true);
}
+
private Dictionary GetDeviceVersions()
{
using (ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("Select * from Win32_PnPSignedDriver"))