GPU boost / temp limits control

This commit is contained in:
Serge
2023-05-06 19:12:50 +02:00
parent 6fe6492df3
commit e71c8e32ef
8 changed files with 223 additions and 55 deletions

View File

@@ -49,9 +49,9 @@ public class ASUSWmi
public const int PPT_CPUB0 = 0x001200B0; // CPU PPT on 2022 (PPT_LIMIT_APU) public const int PPT_CPUB0 = 0x001200B0; // CPU PPT on 2022 (PPT_LIMIT_APU)
public const int PPT_CPUB1 = 0x001200B1; // Total PPT on 2022 (PPT_LIMIT_SLOW) public const int PPT_CPUB1 = 0x001200B1; // Total PPT on 2022 (PPT_LIMIT_SLOW)
public const int PPT_APUC0 = 0x001200C0; // does nothing on G14 2022 public const int PPT_GPUC0 = 0x001200C0; // NVIDIA GPU Boost
public const int PPT_APUC1 = 0x001200C1; // Actual Power Limit (PPT_LIMIT_FAST) AND Sustained Power Limit (STAPM_LIMIT) public const int PPT_APUC1 = 0x001200C1; // Actual Power Limit (PPT_LIMIT_FAST) AND Sustained Power Limit (STAPM_LIMIT)
public const int PPT_APUC2 = 0x001200C2; // does nothing on G14 2022 public const int PPT_GPUC2 = 0x001200C2; // NVIDIA GPU Temp Target (75.. 87 C)
public const int TUF_KB_BRIGHTNESS = 0x00050021; public const int TUF_KB_BRIGHTNESS = 0x00050021;
public const int TUF_KB = 0x00100056; public const int TUF_KB = 0x00100056;
@@ -74,6 +74,12 @@ public class ASUSWmi
public const int MinCPU = 5; public const int MinCPU = 5;
public const int DefaultCPU = 80; public const int DefaultCPU = 80;
public const int MinGPUBoost = 5;
public const int MaxGPUBoost = 25;
public const int MinGPUTemp = 75;
public const int MaxGPUTemp = 87;
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern IntPtr CreateFile( private static extern IntPtr CreateFile(

170
app/Fans.Designer.cs generated
View File

@@ -31,12 +31,12 @@ namespace GHelper
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
ChartArea chartArea1 = new ChartArea(); ChartArea chartArea13 = new ChartArea();
Title title1 = new Title(); Title title13 = new Title();
ChartArea chartArea2 = new ChartArea(); ChartArea chartArea14 = new ChartArea();
Title title2 = new Title(); Title title14 = new Title();
ChartArea chartArea3 = new ChartArea(); ChartArea chartArea15 = new ChartArea();
Title title3 = new Title(); Title title15 = new Title();
panelFans = new Panel(); panelFans = new Panel();
labelFansResult = new Label(); labelFansResult = new Label();
labelTip = new Label(); labelTip = new Label();
@@ -78,6 +78,14 @@ namespace GHelper
panelTitleGPU = new Panel(); panelTitleGPU = new Panel();
pictureGPU = new PictureBox(); pictureGPU = new PictureBox();
labelGPU = new Label(); labelGPU = new Label();
panelGPUBoost = new Panel();
labelGPUBoost = new Label();
labelGPUBoostTitle = new Label();
trackGPUBoost = new TrackBar();
panelGPUTemp = new Panel();
labelGPUTemp = new Label();
labelGPUTempTitle = new Label();
trackGPUTemp = new TrackBar();
panelFans.SuspendLayout(); panelFans.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit(); ((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
tableFanCharts.SuspendLayout(); tableFanCharts.SuspendLayout();
@@ -100,6 +108,10 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)trackGPUCore).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackGPUCore).BeginInit();
panelTitleGPU.SuspendLayout(); panelTitleGPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit();
panelGPUBoost.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUBoost).BeginInit();
panelGPUTemp.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUTemp).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// panelFans // panelFans
@@ -199,8 +211,8 @@ namespace GHelper
// //
// chartGPU // chartGPU
// //
chartArea1.Name = "ChartArea1"; chartArea13.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea1); chartGPU.ChartAreas.Add(chartArea13);
chartGPU.Dock = DockStyle.Fill; chartGPU.Dock = DockStyle.Fill;
chartGPU.Location = new Point(2, 350); chartGPU.Location = new Point(2, 350);
chartGPU.Margin = new Padding(2, 10, 2, 10); chartGPU.Margin = new Padding(2, 10, 2, 10);
@@ -208,13 +220,13 @@ namespace GHelper
chartGPU.Size = new Size(760, 320); chartGPU.Size = new Size(760, 320);
chartGPU.TabIndex = 17; chartGPU.TabIndex = 17;
chartGPU.Text = "chartGPU"; chartGPU.Text = "chartGPU";
title1.Name = "Title1"; title13.Name = "Title1";
chartGPU.Titles.Add(title1); chartGPU.Titles.Add(title13);
// //
// chartCPU // chartCPU
// //
chartArea2.Name = "ChartArea1"; chartArea14.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea2); chartCPU.ChartAreas.Add(chartArea14);
chartCPU.Dock = DockStyle.Fill; chartCPU.Dock = DockStyle.Fill;
chartCPU.Location = new Point(2, 10); chartCPU.Location = new Point(2, 10);
chartCPU.Margin = new Padding(2, 10, 2, 10); chartCPU.Margin = new Padding(2, 10, 2, 10);
@@ -222,13 +234,13 @@ namespace GHelper
chartCPU.Size = new Size(760, 320); chartCPU.Size = new Size(760, 320);
chartCPU.TabIndex = 14; chartCPU.TabIndex = 14;
chartCPU.Text = "chartCPU"; chartCPU.Text = "chartCPU";
title2.Name = "Title1"; title14.Name = "Title1";
chartCPU.Titles.Add(title2); chartCPU.Titles.Add(title14);
// //
// chartMid // chartMid
// //
chartArea3.Name = "ChartArea3"; chartArea15.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea3); chartMid.ChartAreas.Add(chartArea15);
chartMid.Dock = DockStyle.Fill; chartMid.Dock = DockStyle.Fill;
chartMid.Location = new Point(2, 690); chartMid.Location = new Point(2, 690);
chartMid.Margin = new Padding(2, 10, 2, 10); chartMid.Margin = new Padding(2, 10, 2, 10);
@@ -236,8 +248,8 @@ namespace GHelper
chartMid.Size = new Size(760, 322); chartMid.Size = new Size(760, 322);
chartMid.TabIndex = 14; chartMid.TabIndex = 14;
chartMid.Text = "chartMid"; chartMid.Text = "chartMid";
title3.Name = "Title3"; title15.Name = "Title3";
chartMid.Titles.Add(title3); chartMid.Titles.Add(title15);
chartMid.Visible = false; chartMid.Visible = false;
// //
// labelFans // labelFans
@@ -304,16 +316,16 @@ namespace GHelper
panelPower.Controls.Add(panelTotal); panelPower.Controls.Add(panelTotal);
panelPower.Controls.Add(panelTitleCPU); panelPower.Controls.Add(panelTitleCPU);
panelPower.Dock = DockStyle.Fill; panelPower.Dock = DockStyle.Fill;
panelPower.Location = new Point(10, 345); panelPower.Location = new Point(10, 634);
panelPower.Name = "panelPower"; panelPower.Name = "panelPower";
panelPower.Size = new Size(523, 844); panelPower.Size = new Size(523, 555);
panelPower.TabIndex = 43; panelPower.TabIndex = 43;
// //
// panelApplyPower // panelApplyPower
// //
panelApplyPower.Controls.Add(checkApplyPower); panelApplyPower.Controls.Add(checkApplyPower);
panelApplyPower.Dock = DockStyle.Bottom; panelApplyPower.Dock = DockStyle.Bottom;
panelApplyPower.Location = new Point(0, 752); panelApplyPower.Location = new Point(0, 463);
panelApplyPower.Name = "panelApplyPower"; panelApplyPower.Name = "panelApplyPower";
panelApplyPower.Padding = new Padding(10); panelApplyPower.Padding = new Padding(10);
panelApplyPower.Size = new Size(523, 92); panelApplyPower.Size = new Size(523, 92);
@@ -482,13 +494,15 @@ namespace GHelper
// panelGPU // panelGPU
// //
panelGPU.AutoSize = true; panelGPU.AutoSize = true;
panelGPU.Controls.Add(panelGPUTemp);
panelGPU.Controls.Add(panelGPUBoost);
panelGPU.Controls.Add(panelGPUMemory); panelGPU.Controls.Add(panelGPUMemory);
panelGPU.Controls.Add(panelGPUCore); panelGPU.Controls.Add(panelGPUCore);
panelGPU.Controls.Add(panelTitleGPU); panelGPU.Controls.Add(panelTitleGPU);
panelGPU.Dock = DockStyle.Top; panelGPU.Dock = DockStyle.Top;
panelGPU.Location = new Point(10, 0); panelGPU.Location = new Point(10, 0);
panelGPU.Name = "panelGPU"; panelGPU.Name = "panelGPU";
panelGPU.Size = new Size(523, 345); panelGPU.Size = new Size(523, 634);
panelGPU.TabIndex = 44; panelGPU.TabIndex = 44;
// //
// panelGPUMemory // panelGPUMemory
@@ -532,7 +546,7 @@ namespace GHelper
trackGPUMemory.Margin = new Padding(4, 2, 4, 2); trackGPUMemory.Margin = new Padding(4, 2, 4, 2);
trackGPUMemory.Maximum = 300; trackGPUMemory.Maximum = 300;
trackGPUMemory.Name = "trackGPUMemory"; trackGPUMemory.Name = "trackGPUMemory";
trackGPUMemory.Size = new Size(513, 90); trackGPUMemory.Size = new Size(502, 90);
trackGPUMemory.SmallChange = 10; trackGPUMemory.SmallChange = 10;
trackGPUMemory.TabIndex = 42; trackGPUMemory.TabIndex = 42;
trackGPUMemory.TickFrequency = 50; trackGPUMemory.TickFrequency = 50;
@@ -571,7 +585,7 @@ namespace GHelper
trackGPUCore.Maximum = 300; trackGPUCore.Maximum = 300;
trackGPUCore.Name = "trackGPUCore"; trackGPUCore.Name = "trackGPUCore";
trackGPUCore.RightToLeft = RightToLeft.No; trackGPUCore.RightToLeft = RightToLeft.No;
trackGPUCore.Size = new Size(513, 90); trackGPUCore.Size = new Size(502, 90);
trackGPUCore.SmallChange = 10; trackGPUCore.SmallChange = 10;
trackGPUCore.TabIndex = 18; trackGPUCore.TabIndex = 18;
trackGPUCore.TickFrequency = 50; trackGPUCore.TickFrequency = 50;
@@ -622,6 +636,100 @@ namespace GHelper
labelGPU.TabIndex = 40; labelGPU.TabIndex = 40;
labelGPU.Text = "GPU Settings"; labelGPU.Text = "GPU Settings";
// //
// panelGPUBoost
//
panelGPUBoost.AutoSize = true;
panelGPUBoost.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelGPUBoost.Controls.Add(labelGPUBoost);
panelGPUBoost.Controls.Add(labelGPUBoostTitle);
panelGPUBoost.Controls.Add(trackGPUBoost);
panelGPUBoost.Dock = DockStyle.Top;
panelGPUBoost.Location = new Point(0, 345);
panelGPUBoost.Name = "panelGPUBoost";
panelGPUBoost.Size = new Size(523, 140);
panelGPUBoost.TabIndex = 46;
//
// labelGPUBoost
//
labelGPUBoost.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelGPUBoost.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPUBoost.Location = new Point(374, 14);
labelGPUBoost.Name = "labelGPUBoost";
labelGPUBoost.Size = new Size(130, 32);
labelGPUBoost.TabIndex = 44;
labelGPUBoost.Text = "25W";
labelGPUBoost.TextAlign = ContentAlignment.TopRight;
//
// labelGPUBoostTitle
//
labelGPUBoostTitle.AutoSize = true;
labelGPUBoostTitle.Location = new Point(10, 14);
labelGPUBoostTitle.Name = "labelGPUBoostTitle";
labelGPUBoostTitle.Size = new Size(174, 32);
labelGPUBoostTitle.TabIndex = 43;
labelGPUBoostTitle.Text = "Dynamic Boost";
//
// trackGPUBoost
//
trackGPUBoost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackGPUBoost.Location = new Point(6, 48);
trackGPUBoost.Margin = new Padding(4, 2, 4, 2);
trackGPUBoost.Maximum = 25;
trackGPUBoost.Minimum = 5;
trackGPUBoost.Name = "trackGPUBoost";
trackGPUBoost.Size = new Size(502, 90);
trackGPUBoost.TabIndex = 42;
trackGPUBoost.TickFrequency = 5;
trackGPUBoost.TickStyle = TickStyle.TopLeft;
trackGPUBoost.Value = 25;
//
// panelGPUTemp
//
panelGPUTemp.AutoSize = true;
panelGPUTemp.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelGPUTemp.Controls.Add(labelGPUTemp);
panelGPUTemp.Controls.Add(labelGPUTempTitle);
panelGPUTemp.Controls.Add(trackGPUTemp);
panelGPUTemp.Dock = DockStyle.Top;
panelGPUTemp.Location = new Point(0, 485);
panelGPUTemp.Name = "panelGPUTemp";
panelGPUTemp.Size = new Size(523, 149);
panelGPUTemp.TabIndex = 47;
//
// labelGPUTemp
//
labelGPUTemp.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelGPUTemp.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPUTemp.Location = new Point(378, 14);
labelGPUTemp.Name = "labelGPUTemp";
labelGPUTemp.Size = new Size(130, 32);
labelGPUTemp.TabIndex = 44;
labelGPUTemp.Text = "87C";
labelGPUTemp.TextAlign = ContentAlignment.TopRight;
//
// labelGPUTempTitle
//
labelGPUTempTitle.AutoSize = true;
labelGPUTempTitle.Location = new Point(10, 14);
labelGPUTempTitle.Name = "labelGPUTempTitle";
labelGPUTempTitle.Size = new Size(173, 32);
labelGPUTempTitle.TabIndex = 43;
labelGPUTempTitle.Text = "Thermal Target";
//
// trackGPUTemp
//
trackGPUTemp.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackGPUTemp.Location = new Point(6, 57);
trackGPUTemp.Margin = new Padding(4, 2, 4, 2);
trackGPUTemp.Maximum = 87;
trackGPUTemp.Minimum = 75;
trackGPUTemp.Name = "trackGPUTemp";
trackGPUTemp.Size = new Size(502, 90);
trackGPUTemp.TabIndex = 42;
trackGPUTemp.TickFrequency = 5;
trackGPUTemp.TickStyle = TickStyle.TopLeft;
trackGPUTemp.Value = 87;
//
// Fans // Fans
// //
AutoScaleDimensions = new SizeF(192F, 192F); AutoScaleDimensions = new SizeF(192F, 192F);
@@ -674,6 +782,12 @@ namespace GHelper
panelTitleGPU.ResumeLayout(false); panelTitleGPU.ResumeLayout(false);
panelTitleGPU.PerformLayout(); panelTitleGPU.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit();
panelGPUBoost.ResumeLayout(false);
panelGPUBoost.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUBoost).EndInit();
panelGPUTemp.ResumeLayout(false);
panelGPUTemp.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUTemp).EndInit();
ResumeLayout(false); ResumeLayout(false);
} }
@@ -719,5 +833,13 @@ namespace GHelper
private Label labelGPU; private Label labelGPU;
private Panel panelApplyPower; private Panel panelApplyPower;
private RCheckBox checkApplyPower; private RCheckBox checkApplyPower;
private Panel panelGPUBoost;
private Label labelGPUBoost;
private Label labelGPUBoostTitle;
private TrackBar trackGPUBoost;
private Panel panelGPUTemp;
private Label labelGPUTemp;
private Label labelGPUTempTitle;
private TrackBar trackGPUTemp;
} }
} }

View File

@@ -79,12 +79,23 @@ namespace GHelper
trackGPUMemory.Minimum = NvidiaGpuControl.MinMemoryOffset; trackGPUMemory.Minimum = NvidiaGpuControl.MinMemoryOffset;
trackGPUMemory.Maximum = NvidiaGpuControl.MaxMemoryOffset; trackGPUMemory.Maximum = NvidiaGpuControl.MaxMemoryOffset;
trackGPUBoost.Minimum = ASUSWmi.MinGPUBoost;
trackGPUBoost.Maximum = ASUSWmi.MaxGPUBoost;
trackGPUTemp.Minimum = ASUSWmi.MinGPUTemp;
trackGPUTemp.Maximum = ASUSWmi.MaxGPUTemp;
trackGPUCore.Scroll += trackGPU_Scroll; trackGPUCore.Scroll += trackGPU_Scroll;
trackGPUMemory.Scroll += trackGPU_Scroll; trackGPUMemory.Scroll += trackGPU_Scroll;
trackGPUBoost.Scroll += trackGPU_Scroll;
trackGPUTemp.Scroll += trackGPU_Scroll;
trackGPUCore.MouseUp += TrackGPU_MouseUp; trackGPUCore.MouseUp += TrackGPU_MouseUp;
trackGPUMemory.MouseUp += TrackGPU_MouseUp; trackGPUMemory.MouseUp += TrackGPU_MouseUp;
trackGPUBoost.MouseUp += TrackGPUBoost_MouseUp;
trackGPUTemp.MouseUp += TrackGPUBoost_MouseUp;
//labelInfo.MaximumSize = new Size(280, 0); //labelInfo.MaximumSize = new Size(280, 0);
labelInfo.Text = Properties.Strings.PPTExperimental; labelInfo.Text = Properties.Strings.PPTExperimental;
labelFansResult.Visible = false; labelFansResult.Visible = false;
@@ -101,12 +112,19 @@ namespace GHelper
} }
private void TrackGPUBoost_MouseUp(object? sender, MouseEventArgs e)
{
Program.config.setConfig("gpu_boost", trackGPUBoost.Value);
Program.config.setConfig("gpu_temp", trackGPUTemp.Value);
Program.settingsForm.SetGPUPower();
}
private void TrackGPU_MouseUp(object? sender, MouseEventArgs e) private void TrackGPU_MouseUp(object? sender, MouseEventArgs e)
{ {
try try
{ {
Program.config.setConfig("GPUCore", trackGPUCore.Value); Program.config.setConfig("gpu_core", trackGPUCore.Value);
Program.config.setConfig("GPUMemory", trackGPUMemory.Value); Program.config.setConfig("gpu_memory", trackGPUMemory.Value);
int status = Program.nvControl.SetClocks(trackGPUCore.Value, trackGPUMemory.Value); int status = Program.nvControl.SetClocks(trackGPUCore.Value, trackGPUMemory.Value);
if (status == -1) Program.RunAsAdmin("gpu"); if (status == -1) Program.RunAsAdmin("gpu");
@@ -135,41 +153,37 @@ namespace GHelper
trackGPUCore.Value = Math.Max(Math.Min(core, NvidiaGpuControl.MaxCoreOffset), NvidiaGpuControl.MinCoreOffset); trackGPUCore.Value = Math.Max(Math.Min(core, NvidiaGpuControl.MaxCoreOffset), NvidiaGpuControl.MinCoreOffset);
trackGPUMemory.Value = Math.Max(Math.Min(memory, NvidiaGpuControl.MaxMemoryOffset), NvidiaGpuControl.MinMemoryOffset); trackGPUMemory.Value = Math.Max(Math.Min(memory, NvidiaGpuControl.MaxMemoryOffset), NvidiaGpuControl.MinMemoryOffset);
VisualiseGPUClocks(); int gpu_boost = Program.config.getConfig("gpu_boost");
int gpu_temp = Program.config.getConfig("gpu_temp");
if (gpu_boost < 0) gpu_boost = ASUSWmi.MaxGPUBoost;
if (gpu_temp < 0) gpu_temp = ASUSWmi.MaxGPUTemp;
trackGPUBoost.Value = Math.Max(Math.Min(gpu_boost, ASUSWmi.MaxGPUBoost), ASUSWmi.MinGPUBoost);
trackGPUTemp.Value = Math.Max(Math.Min(gpu_temp, ASUSWmi.MaxGPUTemp), ASUSWmi.MinGPUTemp);
VisualiseGPUSettings();
} }
catch (Exception ex) catch (Exception ex)
{ {
Debug.WriteLine(ex); Logger.WriteLine(ex.ToString());
panelGPU.Visible = false; panelGPU.Visible = false;
} }
} }
private void ButtonResetGPU_Click(object? sender, EventArgs e) private void VisualiseGPUSettings()
{
try
{
trackGPUCore.Value = 0;
trackGPUMemory.Value = 0;
VisualiseGPUClocks();
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
}
private void VisualiseGPUClocks()
{ {
labelGPUCore.Text = $"{trackGPUCore.Value} MHz"; labelGPUCore.Text = $"{trackGPUCore.Value} MHz";
labelGPUMemory.Text = $"{trackGPUMemory.Value} MHz"; labelGPUMemory.Text = $"{trackGPUMemory.Value} MHz";
labelGPUBoost.Text = $"{trackGPUBoost.Value}W";
labelGPUTemp.Text = $"{trackGPUTemp.Value}°C";
} }
private void trackGPU_Scroll(object? sender, EventArgs e) private void trackGPU_Scroll(object? sender, EventArgs e)
{ {
VisualiseGPUClocks(); VisualiseGPUSettings();
} }
static string ChartPercToRPM(int percentage, string unit = "") static string ChartPercToRPM(int percentage, string unit = "")

View File

@@ -16,7 +16,7 @@
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly> <ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.57</AssemblyVersion> <AssemblyVersion>0.58</AssemblyVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -48,15 +48,15 @@ public class NvidiaGpuControl : IGpuControl
public void GetClocks(out int core, out int memory) public void GetClocks(out int core, out int memory)
{ {
PhysicalGPU internalGpu = _internalGpu!; PhysicalGPU internalGpu = _internalGpu!;
PerformanceStates20InfoV3 states = (PerformanceStates20InfoV3)GPUApi.GetPerformanceStates20(internalGpu.Handle); PerformanceStates20InfoV1 states = (PerformanceStates20InfoV1)GPUApi.GetPerformanceStates20(internalGpu.Handle);
core = states.Clocks[PerformanceStateId.P0_3DPerformance][0].FrequencyDeltaInkHz.DeltaValue / 1000; core = states.Clocks[PerformanceStateId.P0_3DPerformance][0].FrequencyDeltaInkHz.DeltaValue / 1000;
memory = states.Clocks[PerformanceStateId.P0_3DPerformance][1].FrequencyDeltaInkHz.DeltaValue / 1000; memory = states.Clocks[PerformanceStateId.P0_3DPerformance][1].FrequencyDeltaInkHz.DeltaValue / 1000;
} }
public int SetClocksFromConfig() public int SetClocksFromConfig()
{ {
int core = Program.config.getConfig("GPUCore"); int core = Program.config.getConfig("gpu_core");
int memory = Program.config.getConfig("GPUMemory"); int memory = Program.config.getConfig("gpu_memory");
int status = SetClocks(core, memory); int status = SetClocks(core, memory);
return status; return status;
} }
@@ -68,7 +68,7 @@ public class NvidiaGpuControl : IGpuControl
if (memory < MinMemoryOffset || memory > MaxMemoryOffset) return 0; if (memory < MinMemoryOffset || memory > MaxMemoryOffset) return 0;
PhysicalGPU internalGpu = _internalGpu!; PhysicalGPU internalGpu = _internalGpu!;
PerformanceStates20InfoV3 states = (PerformanceStates20InfoV3)GPUApi.GetPerformanceStates20(internalGpu.Handle); PerformanceStates20InfoV1 states = (PerformanceStates20InfoV1)GPUApi.GetPerformanceStates20(internalGpu.Handle);
states._NumberOfPerformanceStates = 1; states._NumberOfPerformanceStates = 1;
states._NumberOfClocks = 2; states._NumberOfClocks = 2;
@@ -96,8 +96,9 @@ public class NvidiaGpuControl : IGpuControl
.GetPhysicalGPUs() .GetPhysicalGPUs()
.FirstOrDefault(gpu => gpu.SystemType == SystemType.Laptop); .FirstOrDefault(gpu => gpu.SystemType == SystemType.Laptop);
} }
catch catch (Exception ex)
{ {
Logger.WriteLine(ex.ToString());
return null; return null;
} }
} }

View File

@@ -430,9 +430,9 @@ namespace NvAPIWrapper.Native.Delegates
public delegate Status NvAPI_GPU_GetPStates20( public delegate Status NvAPI_GPU_GetPStates20(
[In] PhysicalGPUHandle physicalGpu, [In] PhysicalGPUHandle physicalGpu,
[Accepts( [Accepts(
typeof(PerformanceStates20InfoV3), typeof(PerformanceStates20InfoV1),
typeof(PerformanceStates20InfoV2), typeof(PerformanceStates20InfoV2),
typeof(PerformanceStates20InfoV1) typeof(PerformanceStates20InfoV3)
)] )]
[In] [In]
ValueTypeReference performanceStatesInfo); ValueTypeReference performanceStatesInfo);

View File

@@ -1043,6 +1043,26 @@ namespace GHelper
} }
public void SetGPUPower()
{
int gpu_boost = Program.config.getConfig("gpu_boost");
int gpu_temp = Program.config.getConfig("gpu_temp");
if (gpu_boost < ASUSWmi.MinGPUBoost || gpu_boost > ASUSWmi.MaxGPUBoost ) return;
if (gpu_temp < ASUSWmi.MinGPUTemp || gpu_temp > ASUSWmi.MaxGPUTemp) return;
if (Program.wmi.DeviceGet(ASUSWmi.PPT_GPUC0) >= 0)
{
Program.wmi.DeviceSet(ASUSWmi.PPT_GPUC0, gpu_boost, "PowerLimit C0");
}
if (Program.wmi.DeviceGet(ASUSWmi.PPT_GPUC2) >= 0)
{
Program.wmi.DeviceSet(ASUSWmi.PPT_GPUC2, gpu_temp, "PowerLimit C2");
}
}
protected void LabelFansResult(string text) protected void LabelFansResult(string text)
{ {

5
app/global.json Normal file
View File

@@ -0,0 +1,5 @@
{
"sdk": {
"version": "7.0.203"
}
}