Compare commits

..

5 Commits
v0.57 ... v0.58

Author SHA1 Message Date
Serge
479572e39d Startup admin restarter 2023-05-07 00:24:47 +02:00
Serge
460267aac7 GPU overclocking fixes 2023-05-07 00:14:26 +02:00
Serge
e71c8e32ef GPU boost / temp limits control 2023-05-06 19:12:50 +02:00
Serge
6fe6492df3 GPU clocks tweaks 2023-05-06 18:17:37 +02:00
Serge
c61f4d1608 Experimental GPU overclock 2023-05-06 14:40:52 +02:00
503 changed files with 47273 additions and 349 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_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_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 = 0x00100056;
@@ -74,6 +74,12 @@ public class ASUSWmi
public const int MinCPU = 5;
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)]
private static extern IntPtr CreateFile(

View File

@@ -428,7 +428,7 @@ namespace Starlight.AnimeMatrix
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.AntiAlias;
using (Font font = new Font("Calibri", 16F, GraphicsUnit.Pixel))
using (Font font = new Font("Calibri", 14F, GraphicsUnit.Pixel))
{
SizeF textSize = g.MeasureString(text, font);
g.DrawString(text, font, Brushes.White, 4, 0);

35
app/CustomContextMenu.cs Normal file
View File

@@ -0,0 +1,35 @@
using System.Runtime.InteropServices;
namespace GHelper
{
class CustomContextMenu : ContextMenuStrip
{
[DllImport("dwmapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern long DwmSetWindowAttribute(IntPtr hwnd,
DWMWINDOWATTRIBUTE attribute,
ref DWM_WINDOW_CORNER_PREFERENCE pvAttribute,
uint cbAttribute);
public CustomContextMenu()
{
var preference = DWM_WINDOW_CORNER_PREFERENCE.DWMWCP_ROUNDSMALL; //change as you want
DwmSetWindowAttribute(Handle,
DWMWINDOWATTRIBUTE.DWMWA_WINDOW_CORNER_PREFERENCE,
ref preference,
sizeof(uint));
}
public enum DWMWINDOWATTRIBUTE
{
DWMWA_WINDOW_CORNER_PREFERENCE = 33
}
public enum DWM_WINDOW_CORNER_PREFERENCE
{
DWMWA_DEFAULT = 0,
DWMWCP_DONOTROUND = 1,
DWMWCP_ROUND = 2,
DWMWCP_ROUNDSMALL = 3,
}
}
}

613
app/Fans.Designer.cs generated
View File

@@ -31,12 +31,12 @@ namespace GHelper
/// </summary>
private void InitializeComponent()
{
ChartArea chartArea4 = new ChartArea();
Title title4 = new Title();
ChartArea chartArea5 = new ChartArea();
Title title5 = new Title();
ChartArea chartArea6 = new ChartArea();
Title title6 = new Title();
ChartArea chartArea13 = new ChartArea();
Title title13 = new Title();
ChartArea chartArea14 = new ChartArea();
Title title14 = new Title();
ChartArea chartArea15 = new ChartArea();
Title title15 = new Title();
panelFans = new Panel();
labelFansResult = new Label();
labelTip = new Label();
@@ -50,10 +50,11 @@ namespace GHelper
labelFans = new Label();
checkApplyFans = new RCheckBox();
buttonReset = new RButton();
panelSliders = new Panel();
panelPower = new Panel();
pictureBox1 = new PictureBox();
labelPowerLimits = new Label();
panelApplyPower = new Panel();
checkApplyPower = new RCheckBox();
labelInfo = new Label();
panelCPU = new Panel();
labelCPU = new Label();
label2 = new Label();
@@ -62,35 +63,55 @@ namespace GHelper
labelTotal = new Label();
labelPlatform = new Label();
trackTotal = new TrackBar();
pictureFine = new PictureBox();
labelInfo = new Label();
panelTitleCPU = new Panel();
pictureBox1 = new PictureBox();
labelPowerLimits = new Label();
panelGPU = new Panel();
buttonResetGPU = new RButton();
panelGPUMemory = new Panel();
labelGPUMemory = new Label();
trackGPUMemory = new TrackBar();
labelGPUMemoryTitle = new Label();
pictureBox2 = new PictureBox();
trackGPUMemory = new TrackBar();
panelGPUCore = new Panel();
labelGPUCore = new Label();
labelGPU = new Label();
trackGPUCore = new TrackBar();
labelGPUCoreTitle = new Label();
panelTitleGPU = new Panel();
pictureGPU = new PictureBox();
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();
((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
tableFanCharts.SuspendLayout();
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
((System.ComponentModel.ISupportInitialize)chartMid).BeginInit();
panelSliders.SuspendLayout();
panelPower.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
panelApplyPower.SuspendLayout();
panelCPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit();
panelTotal.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackTotal).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureFine).BeginInit();
panelTitleCPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
panelGPU.SuspendLayout();
panelGPUMemory.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUMemory).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBox2).BeginInit();
panelGPUCore.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUCore).BeginInit();
panelTitleGPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit();
panelGPUBoost.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUBoost).BeginInit();
panelGPUTemp.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUTemp).BeginInit();
SuspendLayout();
//
// panelFans
@@ -105,7 +126,7 @@ namespace GHelper
panelFans.Controls.Add(checkApplyFans);
panelFans.Controls.Add(buttonReset);
panelFans.Dock = DockStyle.Left;
panelFans.Location = new Point(364, 0);
panelFans.Location = new Point(533, 0);
panelFans.Margin = new Padding(0);
panelFans.Name = "panelFans";
panelFans.Padding = new Padding(10);
@@ -190,8 +211,8 @@ namespace GHelper
//
// chartGPU
//
chartArea4.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea4);
chartArea13.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea13);
chartGPU.Dock = DockStyle.Fill;
chartGPU.Location = new Point(2, 350);
chartGPU.Margin = new Padding(2, 10, 2, 10);
@@ -199,13 +220,13 @@ namespace GHelper
chartGPU.Size = new Size(760, 320);
chartGPU.TabIndex = 17;
chartGPU.Text = "chartGPU";
title4.Name = "Title1";
chartGPU.Titles.Add(title4);
title13.Name = "Title1";
chartGPU.Titles.Add(title13);
//
// chartCPU
//
chartArea5.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea5);
chartArea14.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea14);
chartCPU.Dock = DockStyle.Fill;
chartCPU.Location = new Point(2, 10);
chartCPU.Margin = new Padding(2, 10, 2, 10);
@@ -213,13 +234,13 @@ namespace GHelper
chartCPU.Size = new Size(760, 320);
chartCPU.TabIndex = 14;
chartCPU.Text = "chartCPU";
title5.Name = "Title1";
chartCPU.Titles.Add(title5);
title14.Name = "Title1";
chartCPU.Titles.Add(title14);
//
// chartMid
//
chartArea6.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea6);
chartArea15.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea15);
chartMid.Dock = DockStyle.Fill;
chartMid.Location = new Point(2, 690);
chartMid.Margin = new Padding(2, 10, 2, 10);
@@ -227,8 +248,8 @@ namespace GHelper
chartMid.Size = new Size(760, 322);
chartMid.TabIndex = 14;
chartMid.Text = "chartMid";
title6.Name = "Title3";
chartMid.Titles.Add(title6);
title15.Name = "Title3";
chartMid.Titles.Add(title15);
chartMid.Visible = false;
//
// labelFans
@@ -273,303 +294,441 @@ namespace GHelper
buttonReset.Text = Properties.Strings.FactoryDefaults;
buttonReset.UseVisualStyleBackColor = false;
//
// panelSliders
//
panelSliders.Controls.Add(panelPower);
panelSliders.Controls.Add(panelGPU);
panelSliders.Dock = DockStyle.Left;
panelSliders.Location = new Point(0, 0);
panelSliders.Margin = new Padding(0);
panelSliders.Name = "panelSliders";
panelSliders.Padding = new Padding(10, 0, 0, 0);
panelSliders.Size = new Size(533, 1189);
panelSliders.TabIndex = 13;
//
// panelPower
//
panelPower.Controls.Add(pictureBox1);
panelPower.Controls.Add(labelPowerLimits);
panelPower.Controls.Add(checkApplyPower);
panelPower.AutoSize = true;
panelPower.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelPower.Controls.Add(panelApplyPower);
panelPower.Controls.Add(labelInfo);
panelPower.Controls.Add(panelCPU);
panelPower.Controls.Add(panelTotal);
panelPower.Controls.Add(pictureFine);
panelPower.Controls.Add(labelInfo);
panelPower.Dock = DockStyle.Left;
panelPower.Location = new Point(0, 0);
panelPower.Margin = new Padding(10);
panelPower.Controls.Add(panelTitleCPU);
panelPower.Dock = DockStyle.Fill;
panelPower.Location = new Point(10, 634);
panelPower.Name = "panelPower";
panelPower.Padding = new Padding(10);
panelPower.Size = new Size(364, 1189);
panelPower.TabIndex = 13;
panelPower.Size = new Size(523, 555);
panelPower.TabIndex = 43;
//
// pictureBox1
// panelApplyPower
//
pictureBox1.BackgroundImage = Properties.Resources.icons8_processor_96;
pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
pictureBox1.InitialImage = null;
pictureBox1.Location = new Point(20, 18);
pictureBox1.Margin = new Padding(4, 2, 4, 2);
pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new Size(36, 38);
pictureBox1.TabIndex = 38;
pictureBox1.TabStop = false;
//
// labelPowerLimits
//
labelPowerLimits.AutoSize = true;
labelPowerLimits.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelPowerLimits.Location = new Point(54, 20);
labelPowerLimits.Margin = new Padding(4, 0, 4, 0);
labelPowerLimits.Name = "labelPowerLimits";
labelPowerLimits.Size = new Size(229, 32);
labelPowerLimits.TabIndex = 26;
labelPowerLimits.Text = "Power Limits (PPT)";
panelApplyPower.Controls.Add(checkApplyPower);
panelApplyPower.Dock = DockStyle.Bottom;
panelApplyPower.Location = new Point(0, 463);
panelApplyPower.Name = "panelApplyPower";
panelApplyPower.Padding = new Padding(10);
panelApplyPower.Size = new Size(523, 92);
panelApplyPower.TabIndex = 44;
//
// checkApplyPower
//
checkApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
checkApplyPower.AutoSize = true;
checkApplyPower.BackColor = SystemColors.ControlLight;
checkApplyPower.Location = new Point(20, 1118);
checkApplyPower.Margin = new Padding(4, 2, 4, 2);
checkApplyPower.Location = new Point(18, 22);
checkApplyPower.Margin = new Padding(10);
checkApplyPower.Name = "checkApplyPower";
checkApplyPower.Padding = new Padding(15, 5, 15, 5);
checkApplyPower.Size = new Size(277, 46);
checkApplyPower.TabIndex = 25;
checkApplyPower.TabIndex = 45;
checkApplyPower.Text = Properties.Strings.ApplyPowerLimits;
checkApplyPower.UseVisualStyleBackColor = false;
//
// labelInfo
//
labelInfo.Dock = DockStyle.Top;
labelInfo.Location = new Point(0, 368);
labelInfo.Margin = new Padding(4, 0, 4, 0);
labelInfo.Name = "labelInfo";
labelInfo.Padding = new Padding(5);
labelInfo.Size = new Size(523, 92);
labelInfo.TabIndex = 43;
labelInfo.Text = "Experimental Feature";
//
// panelCPU
//
panelCPU.AutoSize = true;
panelCPU.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelCPU.Controls.Add(labelCPU);
panelCPU.Controls.Add(label2);
panelCPU.Controls.Add(trackCPU);
panelCPU.Location = new Point(184, 72);
panelCPU.Dock = DockStyle.Top;
panelCPU.Location = new Point(0, 232);
panelCPU.Margin = new Padding(4);
panelCPU.Name = "panelCPU";
panelCPU.Size = new Size(160, 510);
panelCPU.TabIndex = 23;
panelCPU.Size = new Size(523, 136);
panelCPU.TabIndex = 41;
//
// labelCPU
//
labelCPU.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelCPU.Location = new Point(13, 40);
labelCPU.Location = new Point(398, 8);
labelCPU.Margin = new Padding(4, 0, 4, 0);
labelCPU.Name = "labelCPU";
labelCPU.Size = new Size(120, 32);
labelCPU.TabIndex = 13;
labelCPU.Text = "CPU";
labelCPU.TextAlign = ContentAlignment.MiddleCenter;
labelCPU.TextAlign = ContentAlignment.TopRight;
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(44, 8);
label2.Location = new Point(10, 8);
label2.Margin = new Padding(4, 0, 4, 0);
label2.Name = "label2";
label2.Size = new Size(58, 32);
label2.TabIndex = 12;
label2.Text = "CPU";
label2.TextAlign = ContentAlignment.MiddleCenter;
//
// trackCPU
//
trackCPU.Location = new Point(48, 88);
trackCPU.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackCPU.Location = new Point(6, 44);
trackCPU.Margin = new Padding(4, 2, 4, 2);
trackCPU.Maximum = 85;
trackCPU.Minimum = 5;
trackCPU.Name = "trackCPU";
trackCPU.Orientation = Orientation.Vertical;
trackCPU.Size = new Size(90, 416);
trackCPU.Size = new Size(513, 90);
trackCPU.TabIndex = 11;
trackCPU.TickFrequency = 5;
trackCPU.TickStyle = TickStyle.TopLeft;
trackCPU.Value = 80;
//
// panelTotal
//
panelTotal.AutoSize = true;
panelTotal.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelTotal.Controls.Add(labelTotal);
panelTotal.Controls.Add(labelPlatform);
panelTotal.Controls.Add(trackTotal);
panelTotal.Location = new Point(16, 72);
panelTotal.Dock = DockStyle.Top;
panelTotal.Location = new Point(0, 92);
panelTotal.Margin = new Padding(4);
panelTotal.Name = "panelTotal";
panelTotal.Size = new Size(160, 512);
panelTotal.TabIndex = 22;
panelTotal.Size = new Size(523, 140);
panelTotal.TabIndex = 40;
//
// labelTotal
//
labelTotal.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelTotal.Location = new Point(16, 40);
labelTotal.Location = new Point(396, 10);
labelTotal.Margin = new Padding(4, 0, 4, 0);
labelTotal.Name = "labelTotal";
labelTotal.Size = new Size(122, 32);
labelTotal.TabIndex = 12;
labelTotal.Text = "Platform";
labelTotal.TextAlign = ContentAlignment.MiddleCenter;
labelTotal.TextAlign = ContentAlignment.TopRight;
//
// labelPlatform
//
labelPlatform.AutoSize = true;
labelPlatform.Location = new Point(26, 8);
labelPlatform.Location = new Point(10, 10);
labelPlatform.Margin = new Padding(4, 0, 4, 0);
labelPlatform.Name = "labelPlatform";
labelPlatform.Size = new Size(104, 32);
labelPlatform.TabIndex = 11;
labelPlatform.Text = "Platform";
labelPlatform.TextAlign = ContentAlignment.MiddleCenter;
//
// trackTotal
//
trackTotal.Location = new Point(44, 88);
trackTotal.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackTotal.Location = new Point(6, 48);
trackTotal.Margin = new Padding(4, 2, 4, 2);
trackTotal.Maximum = 180;
trackTotal.Minimum = 10;
trackTotal.Name = "trackTotal";
trackTotal.Orientation = Orientation.Vertical;
trackTotal.Size = new Size(90, 416);
trackTotal.Size = new Size(513, 90);
trackTotal.TabIndex = 10;
trackTotal.TickFrequency = 5;
trackTotal.TickStyle = TickStyle.TopLeft;
trackTotal.Value = 125;
//
// pictureFine
// panelTitleCPU
//
pictureFine.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
pictureFine.BackgroundImageLayout = ImageLayout.Zoom;
pictureFine.Image = Properties.Resources.everything_is_fine_itsfine;
pictureFine.Location = new Point(20, 682);
pictureFine.Margin = new Padding(4, 2, 4, 2);
pictureFine.Name = "pictureFine";
pictureFine.Size = new Size(324, 268);
pictureFine.SizeMode = PictureBoxSizeMode.Zoom;
pictureFine.TabIndex = 20;
pictureFine.TabStop = false;
pictureFine.Visible = false;
panelTitleCPU.AutoSize = true;
panelTitleCPU.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelTitleCPU.Controls.Add(pictureBox1);
panelTitleCPU.Controls.Add(labelPowerLimits);
panelTitleCPU.Dock = DockStyle.Top;
panelTitleCPU.Location = new Point(0, 0);
panelTitleCPU.Name = "panelTitleCPU";
panelTitleCPU.Size = new Size(523, 92);
panelTitleCPU.TabIndex = 42;
//
// labelInfo
// pictureBox1
//
labelInfo.Location = new Point(24, 618);
labelInfo.Margin = new Padding(4, 0, 4, 0);
labelInfo.Name = "labelInfo";
labelInfo.Size = new Size(320, 330);
labelInfo.TabIndex = 19;
labelInfo.Text = "label";
pictureBox1.BackgroundImage = Properties.Resources.icons8_processor_96;
pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
pictureBox1.InitialImage = null;
pictureBox1.Location = new Point(10, 44);
pictureBox1.Margin = new Padding(4, 2, 4, 10);
pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new Size(36, 38);
pictureBox1.TabIndex = 40;
pictureBox1.TabStop = false;
//
// labelPowerLimits
//
labelPowerLimits.AutoSize = true;
labelPowerLimits.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelPowerLimits.Location = new Point(54, 48);
labelPowerLimits.Margin = new Padding(4, 0, 4, 0);
labelPowerLimits.Name = "labelPowerLimits";
labelPowerLimits.Size = new Size(229, 32);
labelPowerLimits.TabIndex = 39;
labelPowerLimits.Text = "Power Limits (PPT)";
//
// panelGPU
//
panelGPU.Controls.Add(buttonResetGPU);
panelGPU.Controls.Add(labelGPUMemory);
panelGPU.Controls.Add(trackGPUMemory);
panelGPU.Controls.Add(labelGPUMemoryTitle);
panelGPU.Controls.Add(pictureBox2);
panelGPU.Controls.Add(labelGPUCore);
panelGPU.Controls.Add(labelGPU);
panelGPU.Controls.Add(trackGPUCore);
panelGPU.Controls.Add(labelGPUCoreTitle);
panelGPU.Dock = DockStyle.Left;
panelGPU.Location = new Point(1188, 0);
panelGPU.AutoSize = true;
panelGPU.Controls.Add(panelGPUTemp);
panelGPU.Controls.Add(panelGPUBoost);
panelGPU.Controls.Add(panelGPUMemory);
panelGPU.Controls.Add(panelGPUCore);
panelGPU.Controls.Add(panelTitleGPU);
panelGPU.Dock = DockStyle.Top;
panelGPU.Location = new Point(10, 0);
panelGPU.Name = "panelGPU";
panelGPU.Size = new Size(347, 1189);
panelGPU.TabIndex = 14;
panelGPU.Size = new Size(523, 634);
panelGPU.TabIndex = 44;
//
// buttonResetGPU
// panelGPUMemory
//
buttonResetGPU.Activated = false;
buttonResetGPU.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonResetGPU.BackColor = SystemColors.ControlLight;
buttonResetGPU.BorderColor = Color.Transparent;
buttonResetGPU.BorderRadius = 2;
buttonResetGPU.FlatStyle = FlatStyle.Flat;
buttonResetGPU.Location = new Point(48, 1110);
buttonResetGPU.Margin = new Padding(4, 2, 4, 2);
buttonResetGPU.Name = "buttonResetGPU";
buttonResetGPU.Secondary = true;
buttonResetGPU.Size = new Size(232, 54);
buttonResetGPU.TabIndex = 43;
buttonResetGPU.Text = "Reset Clocks";
buttonResetGPU.UseVisualStyleBackColor = false;
panelGPUMemory.AutoSize = true;
panelGPUMemory.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelGPUMemory.Controls.Add(labelGPUMemory);
panelGPUMemory.Controls.Add(labelGPUMemoryTitle);
panelGPUMemory.Controls.Add(trackGPUMemory);
panelGPUMemory.Dock = DockStyle.Top;
panelGPUMemory.Location = new Point(0, 205);
panelGPUMemory.Name = "panelGPUMemory";
panelGPUMemory.Size = new Size(523, 140);
panelGPUMemory.TabIndex = 45;
//
// labelGPUMemory
//
labelGPUMemory.AutoSize = true;
labelGPUMemory.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelGPUMemory.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPUMemory.Location = new Point(184, 112);
labelGPUMemory.Location = new Point(378, 14);
labelGPUMemory.Name = "labelGPUMemory";
labelGPUMemory.Size = new Size(130, 32);
labelGPUMemory.TabIndex = 42;
labelGPUMemory.TabIndex = 44;
labelGPUMemory.Text = "2000 MHz";
labelGPUMemory.TextAlign = ContentAlignment.MiddleCenter;
//
// trackGPUMemory
//
trackGPUMemory.LargeChange = 100;
trackGPUMemory.Location = new Point(216, 160);
trackGPUMemory.Margin = new Padding(4, 2, 4, 2);
trackGPUMemory.Maximum = 300;
trackGPUMemory.Name = "trackGPUMemory";
trackGPUMemory.Orientation = Orientation.Vertical;
trackGPUMemory.Size = new Size(90, 454);
trackGPUMemory.SmallChange = 10;
trackGPUMemory.TabIndex = 41;
trackGPUMemory.TickFrequency = 50;
labelGPUMemory.TextAlign = ContentAlignment.TopRight;
//
// labelGPUMemoryTitle
//
labelGPUMemoryTitle.AutoSize = true;
labelGPUMemoryTitle.Location = new Point(167, 72);
labelGPUMemoryTitle.Location = new Point(10, 14);
labelGPUMemoryTitle.Name = "labelGPUMemoryTitle";
labelGPUMemoryTitle.Size = new Size(169, 32);
labelGPUMemoryTitle.TabIndex = 40;
labelGPUMemoryTitle.TabIndex = 43;
labelGPUMemoryTitle.Text = "Memory Clock";
labelGPUMemoryTitle.TextAlign = ContentAlignment.MiddleCenter;
//
// pictureBox2
// trackGPUMemory
//
pictureBox2.BackgroundImage = Properties.Resources.icons8_video_card_48;
pictureBox2.BackgroundImageLayout = ImageLayout.Zoom;
pictureBox2.ErrorImage = null;
pictureBox2.InitialImage = null;
pictureBox2.Location = new Point(25, 17);
pictureBox2.Margin = new Padding(4, 2, 4, 2);
pictureBox2.Name = "pictureBox2";
pictureBox2.Size = new Size(36, 38);
pictureBox2.TabIndex = 39;
pictureBox2.TabStop = false;
trackGPUMemory.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackGPUMemory.LargeChange = 100;
trackGPUMemory.Location = new Point(6, 48);
trackGPUMemory.Margin = new Padding(4, 2, 4, 2);
trackGPUMemory.Maximum = 300;
trackGPUMemory.Name = "trackGPUMemory";
trackGPUMemory.Size = new Size(502, 90);
trackGPUMemory.SmallChange = 10;
trackGPUMemory.TabIndex = 42;
trackGPUMemory.TickFrequency = 50;
trackGPUMemory.TickStyle = TickStyle.TopLeft;
//
// panelGPUCore
//
panelGPUCore.AutoSize = true;
panelGPUCore.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelGPUCore.Controls.Add(labelGPUCore);
panelGPUCore.Controls.Add(trackGPUCore);
panelGPUCore.Controls.Add(labelGPUCoreTitle);
panelGPUCore.Dock = DockStyle.Top;
panelGPUCore.Location = new Point(0, 66);
panelGPUCore.Name = "panelGPUCore";
panelGPUCore.Size = new Size(523, 139);
panelGPUCore.TabIndex = 44;
//
// labelGPUCore
//
labelGPUCore.AutoSize = true;
labelGPUCore.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelGPUCore.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPUCore.Location = new Point(20, 112);
labelGPUCore.Location = new Point(378, 15);
labelGPUCore.Name = "labelGPUCore";
labelGPUCore.Size = new Size(130, 32);
labelGPUCore.TabIndex = 28;
labelGPUCore.TabIndex = 29;
labelGPUCore.Text = "1500 MHz";
labelGPUCore.TextAlign = ContentAlignment.MiddleCenter;
//
// labelGPU
//
labelGPU.AutoSize = true;
labelGPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPU.Location = new Point(60, 19);
labelGPU.Margin = new Padding(4, 0, 4, 0);
labelGPU.Name = "labelGPU";
labelGPU.Size = new Size(162, 32);
labelGPU.TabIndex = 27;
labelGPU.Text = "GPU Settings";
labelGPUCore.TextAlign = ContentAlignment.TopRight;
//
// trackGPUCore
//
trackGPUCore.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackGPUCore.LargeChange = 100;
trackGPUCore.Location = new Point(48, 160);
trackGPUCore.Location = new Point(6, 47);
trackGPUCore.Margin = new Padding(4, 2, 4, 2);
trackGPUCore.Maximum = 300;
trackGPUCore.Name = "trackGPUCore";
trackGPUCore.Orientation = Orientation.Vertical;
trackGPUCore.RightToLeft = RightToLeft.No;
trackGPUCore.Size = new Size(90, 454);
trackGPUCore.Size = new Size(502, 90);
trackGPUCore.SmallChange = 10;
trackGPUCore.TabIndex = 17;
trackGPUCore.TabIndex = 18;
trackGPUCore.TickFrequency = 50;
trackGPUCore.TickStyle = TickStyle.TopLeft;
//
// labelGPUCoreTitle
//
labelGPUCoreTitle.AutoSize = true;
labelGPUCoreTitle.Location = new Point(22, 72);
labelGPUCoreTitle.Location = new Point(10, 15);
labelGPUCoreTitle.Name = "labelGPUCoreTitle";
labelGPUCoreTitle.Size = new Size(129, 32);
labelGPUCoreTitle.TabIndex = 16;
labelGPUCoreTitle.Text = "Core Clock";
labelGPUCoreTitle.TextAlign = ContentAlignment.MiddleCenter;
labelGPUCoreTitle.Size = new Size(201, 32);
labelGPUCoreTitle.TabIndex = 17;
labelGPUCoreTitle.Text = "Core Clock Offset";
//
// panelTitleGPU
//
panelTitleGPU.AutoSize = true;
panelTitleGPU.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelTitleGPU.Controls.Add(pictureGPU);
panelTitleGPU.Controls.Add(labelGPU);
panelTitleGPU.Dock = DockStyle.Top;
panelTitleGPU.Location = new Point(0, 0);
panelTitleGPU.Name = "panelTitleGPU";
panelTitleGPU.Size = new Size(523, 66);
panelTitleGPU.TabIndex = 43;
//
// pictureGPU
//
pictureGPU.BackgroundImage = Properties.Resources.icons8_video_card_48;
pictureGPU.BackgroundImageLayout = ImageLayout.Zoom;
pictureGPU.ErrorImage = null;
pictureGPU.InitialImage = null;
pictureGPU.Location = new Point(18, 18);
pictureGPU.Margin = new Padding(4, 2, 4, 10);
pictureGPU.Name = "pictureGPU";
pictureGPU.Size = new Size(36, 38);
pictureGPU.TabIndex = 41;
pictureGPU.TabStop = false;
//
// labelGPU
//
labelGPU.AutoSize = true;
labelGPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPU.Location = new Point(62, 21);
labelGPU.Margin = new Padding(4, 0, 4, 0);
labelGPU.Name = "labelGPU";
labelGPU.Size = new Size(162, 32);
labelGPU.TabIndex = 40;
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
//
@@ -577,10 +736,9 @@ namespace GHelper
AutoScaleMode = AutoScaleMode.Dpi;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new Size(1542, 1189);
Controls.Add(panelGPU);
ClientSize = new Size(1361, 1189);
Controls.Add(panelFans);
Controls.Add(panelPower);
Controls.Add(panelSliders);
Margin = new Padding(4, 2, 4, 2);
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
@@ -598,21 +756,38 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
((System.ComponentModel.ISupportInitialize)chartCPU).EndInit();
((System.ComponentModel.ISupportInitialize)chartMid).EndInit();
panelSliders.ResumeLayout(false);
panelSliders.PerformLayout();
panelPower.ResumeLayout(false);
panelPower.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
panelApplyPower.ResumeLayout(false);
panelApplyPower.PerformLayout();
panelCPU.ResumeLayout(false);
panelCPU.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackCPU).EndInit();
panelTotal.ResumeLayout(false);
panelTotal.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackTotal).EndInit();
((System.ComponentModel.ISupportInitialize)pictureFine).EndInit();
panelTitleCPU.ResumeLayout(false);
panelTitleCPU.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
panelGPU.ResumeLayout(false);
panelGPU.PerformLayout();
panelGPUMemory.ResumeLayout(false);
panelGPUMemory.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUMemory).EndInit();
((System.ComponentModel.ISupportInitialize)pictureBox2).EndInit();
panelGPUCore.ResumeLayout(false);
panelGPUCore.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUCore).EndInit();
panelTitleGPU.ResumeLayout(false);
panelTitleGPU.PerformLayout();
((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);
}
@@ -620,8 +795,19 @@ namespace GHelper
private Panel panelFans;
private RCheckBox checkApplyFans;
private RButton buttonReset;
private Panel panelSliders;
private TableLayoutPanel tableFanCharts;
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU;
private System.Windows.Forms.DataVisualization.Charting.Chart chartMid;
private Label labelFans;
private PictureBox picturePerf;
private RComboBox comboBoost;
private Label labelBoost;
private Label labelTip;
private Label labelFansResult;
private Panel panelPower;
private RCheckBox checkApplyPower;
private Label labelInfo;
private Panel panelCPU;
private Label labelCPU;
private Label label2;
@@ -630,29 +816,30 @@ namespace GHelper
private Label labelTotal;
private Label labelPlatform;
private TrackBar trackTotal;
private PictureBox pictureFine;
private Label labelInfo;
private Label labelPowerLimits;
private TableLayoutPanel tableFanCharts;
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU;
private System.Windows.Forms.DataVisualization.Charting.Chart chartMid;
private Label labelFans;
private PictureBox picturePerf;
private Panel panelTitleCPU;
private PictureBox pictureBox1;
private RComboBox comboBoost;
private Label labelBoost;
private Label labelTip;
private Label labelFansResult;
private Label labelPowerLimits;
private Panel panelGPU;
private Panel panelGPUMemory;
private Label labelGPUMemory;
private Label labelGPUMemoryTitle;
private TrackBar trackGPUMemory;
private Panel panelGPUCore;
private Label labelGPUCore;
private Label labelGPU;
private TrackBar trackGPUCore;
private Label labelGPUCoreTitle;
private PictureBox pictureBox2;
private Label labelGPUMemory;
private TrackBar trackGPUMemory;
private Label labelGPUMemoryTitle;
private RButton buttonResetGPU;
private Panel panelTitleGPU;
private PictureBox pictureGPU;
private Label labelGPU;
private Panel panelApplyPower;
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

@@ -1,4 +1,5 @@
using CustomControls;
using GHelper.Gpu;
using System.Diagnostics;
using System.Windows.Forms.DataVisualization.Charting;
@@ -13,6 +14,7 @@ namespace GHelper
Series seriesMid;
static int MinRPM, MaxRPM;
public Fans()
{
@@ -71,10 +73,28 @@ namespace GHelper
checkApplyFans.Click += CheckApplyFans_Click;
checkApplyPower.Click += CheckApplyPower_Click;
trackGPUCore.Minimum = NvidiaGpuControl.MinCoreOffset;
trackGPUCore.Maximum = NvidiaGpuControl.MaxCoreOffset;
trackGPUMemory.Minimum = NvidiaGpuControl.MinMemoryOffset;
trackGPUMemory.Maximum = NvidiaGpuControl.MaxMemoryOffset;
trackGPUBoost.Minimum = ASUSWmi.MinGPUBoost;
trackGPUBoost.Maximum = ASUSWmi.MaxGPUBoost;
trackGPUTemp.Minimum = ASUSWmi.MinGPUTemp;
trackGPUTemp.Maximum = ASUSWmi.MaxGPUTemp;
trackGPUCore.Scroll += trackGPU_Scroll;
trackGPUMemory.Scroll += trackGPU_Scroll;
trackGPUBoost.Scroll += trackGPU_Scroll;
trackGPUTemp.Scroll += trackGPU_Scroll;
buttonResetGPU.Click += ButtonResetGPU_Click;
trackGPUCore.MouseUp += TrackGPU_MouseUp;
trackGPUMemory.MouseUp += TrackGPU_MouseUp;
trackGPUBoost.MouseUp += TrackGPUBoost_MouseUp;
trackGPUTemp.MouseUp += TrackGPUBoost_MouseUp;
//labelInfo.MaximumSize = new Size(280, 0);
labelInfo.Text = Properties.Strings.PPTExperimental;
@@ -92,65 +112,78 @@ namespace GHelper
}
private void InitGPUClocks()
private void TrackGPUBoost_MouseUp(object? sender, MouseEventArgs e)
{
/*
try
{
using (var _gpuControl = new NvidiaGpuControl())
{
panelGPU.Visible = _gpuControl.IsValid;
trackGPUCore.Value = Math.Min(Program.config.getConfig("GPUCore"), 300);
trackGPUMemory.Value = Math.Min(Program.config.getConfig("GPUMemory"), 300);
VisualiseGPUClocks();
}
} catch (Exception ex)
{
panelGPU.Visible=false;
}
*/
panelGPU.Visible = false;
Program.config.setConfig("gpu_boost", trackGPUBoost.Value);
Program.config.setConfig("gpu_temp", trackGPUTemp.Value);
Program.settingsForm.SetGPUPower();
}
private void ButtonResetGPU_Click(object? sender, EventArgs e)
private void TrackGPU_MouseUp(object? sender, MouseEventArgs e)
{
try
{
Program.config.setConfig("gpu_core", trackGPUCore.Value);
Program.config.setConfig("gpu_memory", trackGPUMemory.Value);
Program.RunAsAdmin();
int status = Program.nvControl.SetClocks(trackGPUCore.Value, trackGPUMemory.Value);
if (status == -1) Program.RunAsAdmin("gpu");
}
catch (Exception ex)
{
Logger.WriteLine("F:" + ex.ToString());
}
InitGPUClocks();
}
private void InitGPUClocks()
{
if (Program.nvControl is null || !Program.nvControl.IsValid)
{
panelGPU.Visible = false;
return;
}
try
{
trackGPUCore.Value = 0;
trackGPUMemory.Value = 0;
VisualiseGPUClocks();
panelGPU.Visible = true;
Program.nvControl.GetClocks(out int core, out int memory);
trackGPUCore.Value = Math.Max(Math.Min(core, NvidiaGpuControl.MaxCoreOffset), NvidiaGpuControl.MinCoreOffset);
trackGPUMemory.Value = Math.Max(Math.Min(memory, NvidiaGpuControl.MaxMemoryOffset), NvidiaGpuControl.MinMemoryOffset);
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)
{
Logger.WriteLine(ex.ToString());
panelGPU.Visible = false;
}
}
private void VisualiseGPUClocks()
private void VisualiseGPUSettings()
{
labelGPUCore.Text = $"+{trackGPUCore.Value} MHz";
labelGPUMemory.Text = $"+{trackGPUMemory.Value} MHz";
labelGPUCore.Text = $"{trackGPUCore.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)
{
VisualiseGPUClocks();
try
{
Program.config.setConfig("GPUCore", trackGPUCore.Value);
Program.config.setConfig("GPUMemory", trackGPUMemory.Value);
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
VisualiseGPUSettings();
}
static string ChartPercToRPM(int percentage, string unit = "")
@@ -304,7 +337,7 @@ namespace GHelper
bool cpuBmode = (Program.wmi.DeviceGet(ASUSWmi.PPT_CPUB0) >= 0); // 2022 model +
bool cpuAmode = (Program.wmi.DeviceGet(ASUSWmi.PPT_TotalA0) >= 0); // 2021 model +
panelPower.Visible = cpuAmode;
panelSliders.Visible = cpuAmode;
panelCPU.Visible = cpuBmode;
// Yes, that's stupid, but Total slider on 2021 model actually adjusts CPU PPT
@@ -343,7 +376,6 @@ namespace GHelper
labelTotal.Text = trackTotal.Value.ToString() + "W";
labelCPU.Text = trackCPU.Value.ToString() + "W";
pictureFine.Visible = (limit_cpu > 85 || limit_total > 145);
Program.config.setConfigPerf("limit_total", limit_total);
Program.config.setConfigPerf("limit_cpu", limit_cpu);

View File

@@ -16,7 +16,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.57</AssemblyVersion>
<AssemblyVersion>0.58</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -61,7 +61,6 @@
<ItemGroup>
<PackageReference Include="hidlibrary" Version="3.3.40" />
<PackageReference Include="HidSharpCore" Version="1.2.1.1" />
<PackageReference Include="NvAPIWrapper.Net" Version="0.8.1.101" />
<PackageReference Include="System.Management" Version="7.0.1" />
<PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="WinForms.DataVisualization" Version="1.8.0" />

View File

@@ -1,12 +1,21 @@
using NvAPIWrapper.GPU;
using NvAPIWrapper.Native;
using NvAPIWrapper.Native.GPU;
using NvAPIWrapper.Native.GPU.Structures;
using NvAPIWrapper.Native.Interfaces.GPU;
using static NvAPIWrapper.Native.GPU.Structures.PerformanceStates20InfoV1;
namespace GHelper.Gpu;
public class NvidiaGpuControl : IGpuControl
{
public const int MaxCoreOffset = 250;
public const int MaxMemoryOffset = 250;
public const int MinCoreOffset = -250;
public const int MinMemoryOffset = -250;
private readonly PhysicalGPU? _internalGpu;
public NvidiaGpuControl()
@@ -35,6 +44,63 @@ public class NvidiaGpuControl : IGpuControl
{
}
public void GetClocks(out int core, out int memory)
{
PhysicalGPU internalGpu = _internalGpu!;
Logger.WriteLine(internalGpu.FullName);
Logger.WriteLine(internalGpu.ArchitectInformation.ToString());
IPerformanceStates20Info states = GPUApi.GetPerformanceStates20(internalGpu.Handle);
Logger.WriteLine("IPerformanceStates20Info type : " + states.GetType());
core = states.Clocks[PerformanceStateId.P0_3DPerformance][0].FrequencyDeltaInkHz.DeltaValue / 1000;
memory = states.Clocks[PerformanceStateId.P0_3DPerformance][1].FrequencyDeltaInkHz.DeltaValue / 1000;
}
public int SetClocksFromConfig()
{
int core = Program.config.getConfig("gpu_core");
int memory = Program.config.getConfig("gpu_memory");
int status = SetClocks(core, memory);
return status;
}
public int SetClocks(int core, int memory)
{
if (core < MinCoreOffset || core > MaxCoreOffset) return 0;
if (memory < MinMemoryOffset || memory > MaxMemoryOffset) return 0;
PhysicalGPU internalGpu = _internalGpu!;
var coreClock = new PerformanceStates20ClockEntryV1(PublicClockDomain.Graphics, new PerformanceStates20ParameterDelta(core * 1000));
var memoryClock = new PerformanceStates20ClockEntryV1(PublicClockDomain.Memory, new PerformanceStates20ParameterDelta(memory * 1000));
PerformanceStates20ClockEntryV1[] clocks = { coreClock , memoryClock};
PerformanceStates20BaseVoltageEntryV1[] voltages = { };
PerformanceState20[] performanceStates = { new PerformanceState20(PerformanceStateId.P0_3DPerformance, clocks, voltages) };
var overclock = new PerformanceStates20InfoV1(performanceStates, 2, 0);
try
{
GPUApi.SetPerformanceStates20(internalGpu.Handle, overclock);
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
return -1;
}
return 1;
}
private static PhysicalGPU? GetInternalDiscreteGpu()
{
try
@@ -43,8 +109,9 @@ public class NvidiaGpuControl : IGpuControl
.GetPhysicalGPUs()
.FirstOrDefault(gpu => gpu.SystemType == SystemType.Laptop);
}
catch
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
return null;
}
}

View File

@@ -0,0 +1,481 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NvAPIWrapper.Native;
using NvAPIWrapper.Native.DRS;
using NvAPIWrapper.Native.DRS.Structures;
namespace NvAPIWrapper.DRS
{
/// <summary>
/// Represents a NVIDIA driver settings profile
/// </summary>
public class DriverSettingsProfile
{
internal DriverSettingsProfile(DRSProfileHandle handle, DriverSettingsSession parentSession)
{
Handle = handle;
Session = parentSession;
}
/// <summary>
/// Gets a list of applications under this profile
/// </summary>
public IEnumerable<ProfileApplication> Applications
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
return DRSApi.EnumApplications(Session.Handle, Handle)
.Select(application => new ProfileApplication(application, this));
}
}
/// <summary>
/// Gets or sets the profile support value for GPU series
/// </summary>
public DRSGPUSupport GPUSupport
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var profileInfo = DRSApi.GetProfileInfo(Session.Handle, Handle);
return profileInfo.GPUSupport;
}
set
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var profileInfo = DRSApi.GetProfileInfo(Session.Handle, Handle);
profileInfo.GPUSupport = value;
DRSApi.SetProfileInfo(Session.Handle, Handle, profileInfo);
}
}
/// <summary>
/// Gets the profile handle
/// </summary>
public DRSProfileHandle Handle { get; private set; }
/// <summary>
/// Gets a boolean value indicating if this profile is predefined
/// </summary>
public bool IsPredefined
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var profileInfo = DRSApi.GetProfileInfo(Session.Handle, Handle);
return profileInfo.IsPredefined;
}
}
/// <summary>
/// Gets a boolean value indicating if this profile is valid and contains a non-zero handle
/// </summary>
public bool IsValid
{
get => !Handle.IsNull;
}
/// <summary>
/// Gets the name of the profile
/// </summary>
public string Name
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var profileInfo = DRSApi.GetProfileInfo(Session.Handle, Handle);
return profileInfo.Name;
}
}
/// <summary>
/// Gets the number of application registered under this profile
/// </summary>
public int NumberOfApplications
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var profileInfo = DRSApi.GetProfileInfo(Session.Handle, Handle);
return profileInfo.NumberOfApplications;
}
}
/// <summary>
/// Gets the number of settings under this profile
/// </summary>
public int NumberOfSettings
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var profileInfo = DRSApi.GetProfileInfo(Session.Handle, Handle);
return profileInfo.NumberOfSettings;
}
}
/// <summary>
/// Gets the session that had queried this profile
/// </summary>
public DriverSettingsSession Session { get; }
/// <summary>
/// Gets a list of settings under this profile
/// </summary>
public IEnumerable<ProfileSetting> Settings
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
return DRSApi.EnumSettings(Session.Handle, Handle).Select(setting => new ProfileSetting(setting));
}
}
/// <summary>
/// Creates a new profile
/// </summary>
/// <param name="session">The session to create this profile in.</param>
/// <param name="profileName">The name of the profile.</param>
/// <param name="gpuSupport">The supported GPU series for this profile.</param>
/// <returns>An instance of <see cref="DriverSettingsProfile" /> representing this newly created profile.</returns>
public static DriverSettingsProfile CreateProfile(
DriverSettingsSession session,
string profileName,
DRSGPUSupport? gpuSupport = null)
{
gpuSupport = gpuSupport ?? new DRSGPUSupport();
var profileInfo = new DRSProfileV1(profileName, gpuSupport.Value);
var profileHandle = DRSApi.CreateProfile(session.Handle, profileInfo);
return new DriverSettingsProfile(profileHandle, session);
}
/// <inheritdoc />
public override string ToString()
{
if (!IsValid)
{
return "[Invalid]";
}
if (IsPredefined)
{
return $"{Name} (Predefined)";
}
return Name;
}
/// <summary>
/// Deletes this profile and makes this instance invalid.
/// </summary>
public void Delete()
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
DRSApi.DeleteProfile(Session.Handle, Handle);
Handle = DRSProfileHandle.DefaultHandle;
}
/// <summary>
/// Deletes an application by its name.
/// </summary>
/// <param name="applicationName">The name of the application to be deleted.</param>
public void DeleteApplicationByName(string applicationName)
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
DRSApi.DeleteApplication(Session.Handle, Handle, applicationName);
}
/// <summary>
/// Deletes a setting by its identification number
/// </summary>
/// <param name="settingId">The identification number of the setting to be deleted.</param>
public void DeleteSetting(uint settingId)
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
DRSApi.DeleteProfileSetting(Session.Handle, Handle, settingId);
}
/// <summary>
/// Deletes a setting by its known identification number.
/// </summary>
/// <param name="settingId">The known identification number of the setting to be deleted.</param>
public void DeleteSetting(KnownSettingId settingId)
{
DeleteSetting(SettingInfo.GetSettingId(settingId));
}
/// <summary>
/// Finds an application by its name.
/// </summary>
/// <param name="applicationName">The name of the application to search for.</param>
/// <returns>
/// An instance of <see cref="ProfileApplication" /> if an application is found; otherwise <see langword="null" />
/// .
/// </returns>
public ProfileApplication GetApplicationByName(string applicationName)
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var application = DRSApi.GetApplicationInfo(Session.Handle, Handle, applicationName);
if (application == null)
{
return null;
}
return new ProfileApplication(application, this);
}
/// <summary>
/// Searches for a setting using its identification number.
/// </summary>
/// <param name="settingId">The identification number of the setting to search for.</param>
/// <returns>An instance of <see cref="ProfileSetting" /> if a setting is found; otherwise <see langword="null" />.</returns>
public ProfileSetting GetSetting(uint settingId)
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var setting = DRSApi.GetSetting(Session.Handle, Handle, settingId);
if (setting == null)
{
return null;
}
return new ProfileSetting(setting.Value);
}
/// <summary>
/// Searches for a setting using its known identification number.
/// </summary>
/// <param name="settingId">The known identification number of the setting to search for.</param>
/// <returns>An instance of <see cref="ProfileSetting" /> if a setting is found; otherwise <see langword="null" />.</returns>
public ProfileSetting GetSetting(KnownSettingId settingId)
{
return GetSetting(SettingInfo.GetSettingId(settingId));
}
/// <summary>
/// Restores applications and settings of this profile to their default. This also deletes custom profiles resulting in
/// their handles becoming invalid.
/// </summary>
public void RestoreDefaults()
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var isPredefined = IsPredefined;
DRSApi.RestoreDefaults(Session.Handle, Handle);
if (!isPredefined)
{
Handle = DRSProfileHandle.DefaultHandle;
}
}
/// <summary>
/// Restores a setting to its default value.
/// </summary>
/// <param name="settingId">The identification number of the setting.</param>
public void RestoreSettingToDefault(uint settingId)
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
DRSApi.RestoreDefaults(Session.Handle, Handle, settingId);
}
/// <summary>
/// Restores a setting to its default value.
/// </summary>
/// <param name="settingId">The known identification number of the setting.</param>
public void RestoreSettingToDefault(KnownSettingId settingId)
{
RestoreSettingToDefault(SettingInfo.GetSettingId(settingId));
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The known identification number of the setting to change its value.</param>
/// <param name="settingType">The type of the setting value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(KnownSettingId settingId, DRSSettingType settingType, object value)
{
SetSetting(SettingInfo.GetSettingId(settingId), settingType, value);
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The known identification number of the setting to change its value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(KnownSettingId settingId, string value)
{
SetSetting(SettingInfo.GetSettingId(settingId), value);
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The known identification number of the setting to change its value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(KnownSettingId settingId, byte[] value)
{
SetSetting(SettingInfo.GetSettingId(settingId), value);
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The known identification number of the setting to change its value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(KnownSettingId settingId, uint value)
{
SetSetting(SettingInfo.GetSettingId(settingId), value);
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The identification number of the setting to change its value.</param>
/// <param name="settingType">The type of the setting value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(uint settingId, DRSSettingType settingType, object value)
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid profile instance."
);
}
var setting = new DRSSettingV1(settingId, settingType, value);
DRSApi.SetSetting(Session.Handle, Handle, setting);
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The identification number of the setting to change its value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(uint settingId, string value)
{
SetSetting(settingId, DRSSettingType.UnicodeString, value);
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The identification number of the setting to change its value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(uint settingId, byte[] value)
{
SetSetting(settingId, DRSSettingType.Binary, value);
}
/// <summary>
/// Sets a new value for a setting or creates a new setting and sets its value
/// </summary>
/// <param name="settingId">The identification number of the setting to change its value.</param>
/// <param name="value">The new value for the setting.</param>
public void SetSetting(uint settingId, uint value)
{
SetSetting(settingId, DRSSettingType.Integer, value);
}
}
}

View File

@@ -0,0 +1,236 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NvAPIWrapper.Native;
using NvAPIWrapper.Native.DRS.Structures;
namespace NvAPIWrapper.DRS
{
/// <summary>
/// Represents a driver settings session. This is the starting point for using DRS set of functionalities.
/// </summary>
public class DriverSettingsSession : IDisposable
{
internal DriverSettingsSession(DRSSessionHandle handle)
{
Handle = handle;
}
private DriverSettingsSession() : this(DRSApi.CreateSession())
{
}
/// <summary>
/// Gets the base settings profile
/// </summary>
public DriverSettingsProfile BaseProfile
{
get
{
var profileHandle = DRSApi.GetBaseProfile(Handle);
if (profileHandle.IsNull)
{
return null;
}
return new DriverSettingsProfile(profileHandle, this);
}
}
/// <summary>
/// Gets the global settings profile
/// </summary>
public DriverSettingsProfile CurrentGlobalProfile
{
get
{
var profileHandle = DRSApi.GetCurrentGlobalProfile(Handle);
if (profileHandle.IsNull)
{
return null;
}
return new DriverSettingsProfile(profileHandle, this);
}
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
if (string.IsNullOrEmpty(value.Name))
{
throw new ArgumentException("Profile name can not be empty.", nameof(value));
}
DRSApi.SetCurrentGlobalProfile(Handle, value.Name);
}
}
/// <summary>
/// Gets the session handle
/// </summary>
public DRSSessionHandle Handle { get; }
/// <summary>
/// Gets the number of registered profiles
/// </summary>
public int NumberOfProfiles
{
get => DRSApi.GetNumberOfProfiles(Handle);
}
/// <summary>
/// Gets the list of all registered profiles
/// </summary>
public IEnumerable<DriverSettingsProfile> Profiles
{
get { return DRSApi.EnumProfiles(Handle).Select(handle => new DriverSettingsProfile(handle, this)); }
}
/// <inheritdoc />
public void Dispose()
{
ReleaseUnmanagedResources();
GC.SuppressFinalize(this);
}
/// <summary>
/// Creates a new session and load the settings
/// </summary>
/// <returns>A new instance of <see cref="DriverSettingsSession" /> representing a session.</returns>
public static DriverSettingsSession CreateAndLoad()
{
var session = new DriverSettingsSession();
session.Load();
return session;
}
/// <summary>
/// Creates a new session and load the settings from a file
/// </summary>
/// <param name="fileName">The full path of file to load settings from.</param>
/// <returns>A new instance of <see cref="DriverSettingsSession" /> representing a session.</returns>
public static DriverSettingsSession CreateAndLoad(string fileName)
{
var session = new DriverSettingsSession();
session.Load(fileName);
return session;
}
/// <inheritdoc />
public override string ToString()
{
return $"{Handle} ({NumberOfProfiles} Profiles)";
}
/// <summary>
/// Finds an application by name. This method is useful when passed a full path of a file as it does return an
/// application almost always describing the NVIDIA driver behavior regarding the passed executable file.
/// </summary>
/// <param name="applicationName">The name of the application (with extension) or the full path of an executable file.</param>
/// <returns>An instance of <see cref="ProfileApplication" /> class.</returns>
public ProfileApplication FindApplication(string applicationName)
{
var application = DRSApi.FindApplicationByName(Handle, applicationName, out var profileHandle);
if (application == null || !profileHandle.HasValue || profileHandle.Value.IsNull)
{
return null;
}
var profile = new DriverSettingsProfile(profileHandle.Value, this);
return new ProfileApplication(application, profile);
}
/// <summary>
/// Finds a profile based on the application named passed. This method is useful when passed a full path of a file as
/// it does return a profile almost always describing the NVIDIA driver behavior regarding the passed executable file.
/// </summary>
/// <param name="applicationName">The name of the application (with extension) or the full path of an executable file.</param>
/// <returns>
/// An instance of <see cref="DriverSettingsProfile" /> class describing the NVIDIA driver behavior regarding the
/// passed executable file.
/// </returns>
public DriverSettingsProfile FindApplicationProfile(string applicationName)
{
var application = DRSApi.FindApplicationByName(Handle, applicationName, out var profileHandle);
if (application == null || !profileHandle.HasValue || profileHandle.Value.IsNull)
{
return null;
}
return new DriverSettingsProfile(profileHandle.Value, this);
}
/// <summary>
/// Finds a profile based on its name.
/// </summary>
/// <param name="profileName">The profile name to search for.</param>
/// <returns>An instance of <see cref="DriverSettingsProfile" /> class.</returns>
public DriverSettingsProfile FindProfileByName(string profileName)
{
var profileHandle = DRSApi.FindProfileByName(Handle, profileName);
if (profileHandle.IsNull)
{
return null;
}
return new DriverSettingsProfile(profileHandle, this);
}
/// <summary>
/// Resets all settings to default.
/// </summary>
public void RestoreDefaults()
{
DRSApi.RestoreDefaults(Handle);
}
/// <summary>
/// Saves the current session settings
/// </summary>
public void Save()
{
DRSApi.SaveSettings(Handle);
}
/// <summary>
/// Saves the current session settings to a file
/// </summary>
/// <param name="fileName">The full path of file to save settings to.</param>
public void Save(string fileName)
{
DRSApi.SaveSettings(Handle, fileName);
}
private void Load()
{
DRSApi.LoadSettings(Handle);
}
private void Load(string fileName)
{
DRSApi.LoadSettings(Handle, fileName);
}
private void ReleaseUnmanagedResources()
{
DRSApi.DestroySession(Handle);
}
/// <inheritdoc />
~DriverSettingsSession()
{
ReleaseUnmanagedResources();
}
}
}

View File

@@ -0,0 +1,555 @@
using System.ComponentModel;
namespace NvAPIWrapper.DRS
{
#pragma warning disable 1591
public enum KnownSettingId : uint
{
/// <summary>
/// Antialiasing - Line gamma
/// </summary>
[Description("Antialiasing - Line gamma")]
OpenGLAntiAliasingLineGamma = 0x2089BF6C,
/// <summary>
/// Deep color for 3D applications
/// </summary>
[Description("Deep color for 3D applications")]
OpenGLDeepColorScanOut = 0x2097C2F6,
/// <summary>
/// OpenGL default swap interval
/// </summary>
[Description("OpenGL default swap interval")]
OpenGLDefaultSwapInterval = 0x206A6582,
/// <summary>
/// OpenGL default swap interval fraction
/// </summary>
[Description("OpenGL default swap interval fraction")]
OpenGLDefaultSwapIntervalFractional = 0x206C4581,
/// <summary>
/// OpenGL default swap interval sign
/// </summary>
[Description("OpenGL default swap interval sign")]
OpenGLDefaultSwapIntervalSign = 0x20655CFA,
/// <summary>
/// Event Log Severity Threshold
/// </summary>
[Description("Event Log Severity Threshold")]
OpenGLEventLogSeverityThreshold = 0x209DF23E,
/// <summary>
/// Extension String version
/// </summary>
[Description("Extension String version")]
OpenGLExtensionStringVersion = 0x20FF7493,
/// <summary>
/// Buffer-flipping mode
/// </summary>
[Description("Buffer-flipping mode")] OpenGLForceBlit = 0x201F619F,
/// <summary>
/// Force Stereo shuttering
/// </summary>
[Description("Force Stereo shuttering")]
OpenGLForceStereo = 0x204D9A0C,
/// <summary>
/// Preferred OpenGL GPU
/// </summary>
[Description("Preferred OpenGL GPU")] OpenGLImplicitGPUAffinity = 0x20D0F3E6,
/// <summary>
/// Maximum frames allowed
/// </summary>
[Description("Maximum frames allowed")]
OpenGLMaximumFramesAllowed = 0x208E55E3,
/// <summary>
/// Exported Overlay pixel types
/// </summary>
[Description("Exported Overlay pixel types")]
OpenGLOverlayPixelType = 0x209AE66F,
/// <summary>
/// Enable overlay
/// </summary>
[Description("Enable overlay")] OpenGLOverlaySupport = 0x206C28C4,
/// <summary>
/// High level control of the rendering quality on OpenGL
/// </summary>
[Description("High level control of the rendering quality on OpenGL")]
OpenGLQualityEnhancements = 0x20797D6C,
/// <summary>
/// Unified back/depth buffer
/// </summary>
[Description("Unified back/depth buffer")]
OpenGLSingleBackDepthBuffer = 0x20A29055,
/// <summary>
/// Enable NV_gpu_multicast extension
/// </summary>
[Description("Enable NV_gpu_multicast extension")]
OpenGLSLIMulticast = 0x2092D3BE,
/// <summary>
/// Threaded optimization
/// </summary>
[Description("Threaded optimization")] OpenGLThreadControl = 0x20C1221E,
/// <summary>
/// Event Log Tmon Severity Threshold
/// </summary>
[Description("Event Log Tmon Severity Threshold")]
OpenGLTMONLevel = 0x202888C1,
/// <summary>
/// Triple buffering
/// </summary>
[Description("Triple buffering")] OpenGLTripleBuffer = 0x20FDD1F9,
/// <summary>
/// Antialiasing - Behavior Flags
/// </summary>
[Description("Antialiasing - Behavior Flags")]
AntiAliasingBehaviorFlags = 0x10ECDB82,
/// <summary>
/// Antialiasing - Transparency Multisampling
/// </summary>
[Description("Antialiasing - Transparency Multisampling")]
AntiAliasingModeAlphaToCoverage = 0x10FC2D9C,
/// <summary>
/// Antialiasing - Gamma correction
/// </summary>
[Description("Antialiasing - Gamma correction")]
AntiAliasingModeGammaCorrection = 0x107D639D,
/// <summary>
/// Antialiasing - Setting
/// </summary>
[Description("Antialiasing - Setting")]
AntiAliasingModeMethod = 0x10D773D2,
/// <summary>
/// Antialiasing - Transparency Supersampling
/// </summary>
[Description("Antialiasing - Transparency Supersampling")]
AntiAliasingModeReplay = 0x10D48A85,
/// <summary>
/// Antialiasing - Mode
/// </summary>
[Description("Antialiasing - Mode")] AntiAliasingModeSelector = 0x107EFC5B,
/// <summary>
/// Antialiasing - SLI AA
/// </summary>
[Description("Antialiasing - SLI AA")] AntiAliasingModeSelectorSLIAntiAliasing = 0x107AFC5B,
/// <summary>
/// Anisotropic filtering setting
/// </summary>
[Description("Anisotropic filtering setting")]
AnisotropicModeLevel = 0x101E61A9,
/// <summary>
/// Anisotropic filtering mode
/// </summary>
[Description("Anisotropic filtering mode")]
AnisotropicModeSelector = 0x10D2BB16,
/// <summary>
/// NVIDIA Predefined Ansel Usage
/// </summary>
[Description("NVIDIA Predefined Ansel Usage")]
AnselAllow = 0x1035DB89,
/// <summary>
/// Enable Ansel
/// </summary>
[Description("Enable Ansel")] AnselEnable = 0x1075D972,
/// <summary>
/// Ansel flags for enabled applications
/// </summary>
[Description("Ansel flags for enabled applications")]
AnselWhiteListed = 0x1085DA8A,
/// <summary>
/// Application Profile Notification Popup Timeout
/// </summary>
[Description("Application Profile Notification Popup Timeout")]
ApplicationProfileNotificationTimeOut = 0x104554B6,
/// <summary>
/// Steam Application ID
/// </summary>
[Description("Steam Application ID")] ApplicationSteamId = 0x107CDDBC,
/// <summary>
/// Battery Boost
/// </summary>
[Description("Battery Boost")] BatteryBoost = 0x10115C89,
/// <summary>
/// Do not display this profile in the Control Panel
/// </summary>
[Description("Do not display this profile in the Control Panel")]
ControlPanelHiddenProfile = 0x106D5CFF,
/// <summary>
/// List of Universal GPU ids
/// </summary>
[Description("List of Universal GPU ids")]
CUDAExcludedGPUs = 0x10354FF8,
/// <summary>
/// Maximum GPU Power
/// </summary>
[Description("Maximum GPU Power")] D3DOpenGLGPUMaximumPower = 0x10D1EF29,
/// <summary>
/// Export Performance Counters
/// </summary>
[Description("Export Performance Counters")]
ExportPerformanceCounters = 0x108F0841,
/// <summary>
/// NVIDIA Predefined FXAA Usage
/// </summary>
[Description("NVIDIA Predefined FXAA Usage")]
FXAAAllow = 0x1034CB89,
/// <summary>
/// Enable FXAA
/// </summary>
[Description("Enable FXAA")] FXAAEnable = 0x1074C972,
/// <summary>
/// Enable FXAA Indicator
/// </summary>
[Description("Enable FXAA Indicator")] FXAAIndicatorEnable = 0x1068FB9C,
/// <summary>
/// SLI indicator
/// </summary>
[Description("SLI indicator")] MCSFRShowSplit = 0x10287051,
/// <summary>
/// NVIDIA Quality upscaling
/// </summary>
[Description("NVIDIA Quality upscaling")]
NvidiaQualityUpScaling = 0x10444444,
/// <summary>
/// Maximum AA samples allowed for a given application
/// </summary>
[Description("Maximum AA samples allowed for a given application")]
OptimusMaximumAntiAliasing = 0x10F9DC83,
/// <summary>
/// Display the PhysX indicator
/// </summary>
[Description("Display the PhysX indicator")]
PhysxIndicator = 0x1094F16F,
/// <summary>
/// Power management mode
/// </summary>
[Description("Power management mode")] PreferredPerformanceState = 0x1057EB71,
/// <summary>
/// No override of Anisotropic filtering
/// </summary>
[Description("No override of Anisotropic filtering")]
PreventUiAnisotropicOverride = 0x103BCCB5,
/// <summary>
/// Frame Rate Limiter
/// </summary>
[Description("Frame Rate Limiter")] PerformanceStateFrameRateLimiter = 0x10834FEE,
/// <summary>
/// Frame Rate Limiter 2 Control
/// </summary>
[Description("Frame Rate Limiter 2 Control")]
PerformanceStateFrameRateLimiter2Control = 0x10834FFF,
/// <summary>
/// Frame Rate Monitor
/// </summary>
[Description("Frame Rate Monitor")] PerformanceStateFrameRateLimiterGpsControl = 0x10834F01,
/// <summary>
/// Frame Rate Monitor Control
/// </summary>
[Description("Frame Rate Monitor Control")]
PerformanceStateFrameRateMonitorControl = 0x10834F05,
/// <summary>
/// Maximum resolution allowed for a given application
/// </summary>
[Description("Maximum resolution allowed for a given application")]
ShimMaxResolution = 0x10F9DC82,
/// <summary>
/// Optimus flags for enabled applications
/// </summary>
[Description("Optimus flags for enabled applications")]
ShimMCCOMPAT = 0x10F9DC80,
/// <summary>
/// Enable application for Optimus
/// </summary>
[Description("Enable application for Optimus")]
ShimRenderingMode = 0x10F9DC81,
/// <summary>
/// Shim Rendering Mode Options per application for Optimus
/// </summary>
[Description("Shim Rendering Mode Options per application for Optimus")]
ShimRenderingOptions = 0x10F9DC84,
/// <summary>
/// Number of GPUs to use on SLI rendering mode
/// </summary>
[Description("Number of GPUs to use on SLI rendering mode")]
SLIGPUCount = 0x1033DCD1,
/// <summary>
/// NVIDIA predefined number of GPUs to use on SLI rendering mode
/// </summary>
[Description("NVIDIA predefined number of GPUs to use on SLI rendering mode")]
SLIPredefinedGPUCount = 0x1033DCD2,
/// <summary>
/// NVIDIA predefined number of GPUs to use on SLI rendering mode on DirectX 10
/// </summary>
[Description("NVIDIA predefined number of GPUs to use on SLI rendering mode on DirectX 10")]
SLIPredefinedGPUCountDX10 = 0x1033DCD3,
/// <summary>
/// NVIDIA predefined SLI mode
/// </summary>
[Description("NVIDIA predefined SLI mode")]
SLIPredefinedMode = 0x1033CEC1,
/// <summary>
/// NVIDIA predefined SLI mode on DirectX 10
/// </summary>
[Description("NVIDIA predefined SLI mode on DirectX 10")]
SLIPredefinedModeDX10 = 0x1033CEC2,
/// <summary>
/// SLI rendering mode
/// </summary>
[Description("SLI rendering mode")] SLIRenderingMode = 0x1033CED1,
/// <summary>
/// Virtual Reality pre-rendered frames
/// </summary>
[Description("Virtual Reality pre-rendered frames")]
VRPreRenderLimit = 0x10111133,
/// <summary>
/// Toggle the VRR global feature
/// </summary>
[Description("Toggle the VRR global feature")]
VRRFeatureIndicator = 0x1094F157,
/// <summary>
/// Display the VRR Overlay Indicator
/// </summary>
[Description("Display the VRR Overlay Indicator")]
VRROverlayIndicator = 0x1095F16F,
/// <summary>
/// VRR requested state
/// </summary>
[Description("VRR requested state")] VRRRequestState = 0x1094F1F7,
/// <summary>
/// G-SYNC
/// </summary>
[Description("G-SYNC")] VRRApplicationOverride = 0x10A879CF,
/// <summary>
/// G-SYNC
/// </summary>
[Description("G-SYNC")] VRRApplicationOverrideRequestState = 0x10A879AC,
/// <summary>
/// Enable G-SYNC globally
/// </summary>
[Description("Enable G-SYNC globally")]
VRRMode = 0x1194F158,
/// <summary>
/// Flag to control smooth AFR behavior
/// </summary>
[Description("Flag to control smooth AFR behavior")]
VSyncSmoothAFR = 0x101AE763,
/// <summary>
/// Variable refresh Rate
/// </summary>
[Description("Variable refresh Rate")] VSyncVRRControl = 0x10A879CE,
/// <summary>
/// Vsync - Behavior Flags
/// </summary>
[Description("Vsync - Behavior Flags")]
VSyncBehaviorFlags = 0x10FDEC23,
/// <summary>
/// Stereo - Swap eyes
/// </summary>
[Description("Stereo - Swap eyes")] WKSAPIStereoEyesExchange = 0x11AE435C,
/// <summary>
/// Stereo - Display mode
/// </summary>
[Description("Stereo - Display mode")] WKSAPIStereoMode = 0x11E91A61,
/// <summary>
/// Memory Allocation Policy
/// </summary>
[Description("Memory Allocation Policy")]
WKSMemoryAllocationPolicy = 0x11112233,
/// <summary>
/// Stereo - Dongle Support
/// </summary>
[Description("Stereo - Dongle Support")]
WKSStereoDongleSupport = 0x112493BD,
/// <summary>
/// Stereo - Enable
/// </summary>
[Description("Stereo - Enable")] WKSStereoSupport = 0x11AA9E99,
/// <summary>
/// Stereo <20> swap mode
/// </summary>
[Description("Stereo <20> swap mode")] WKSStereoSwapMode = 0x11333333,
/// <summary>
/// Ambient Occlusion
/// </summary>
[Description("Ambient Occlusion")] AmbientOcclusionMode = 0x667329,
/// <summary>
/// NVIDIA Predefined Ambient Occlusion Usage
/// </summary>
[Description("NVIDIA Predefined Ambient Occlusion Usage")]
AmbientOcclusionModeActive = 0x664339,
/// <summary>
/// Texture filtering - Driver Controlled LOD Bias
/// </summary>
[Description("Texture filtering - Driver Controlled LOD Bias")]
AutoLODBiasAdjust = 0x638E8F,
/// <summary>
/// Export Performance Counters for DX9 only
/// </summary>
[Description("Export Performance Counters for DX9 only")]
ExportPerformanceCountersDX9Only = 0xB65E72,
/// <summary>
/// ICafe Settings
/// </summary>
[Description("ICafe Settings")] ICafeLogoConfig = 0xDB1337,
/// <summary>
/// Texture filtering - LOD Bias
/// </summary>
[Description("Texture filtering - LOD Bias")]
LODBiasAdjust = 0x738E8F,
/// <summary>
/// Enable sample interleaving (MFAA)
/// </summary>
[Description("Enable sample interleaving (MFAA)")]
MaxwellBSampleInterleave = 0x98C1AC,
/// <summary>
/// Maximum pre-rendered frames
/// </summary>
[Description("Maximum pre-rendered frames")]
PreRenderLimit = 0x7BA09E,
/// <summary>
/// Shader Cache
/// </summary>
[Description("Shader Cache")] PerformanceStateShaderDiskCache = 0x198FFF,
/// <summary>
/// Texture filtering - Anisotropic sample optimization
/// </summary>
[Description("Texture filtering - Anisotropic sample optimization")]
PerformanceStateTextureFilteringAnisotropicOptimization = 0xE73211,
/// <summary>
/// Texture filtering - Anisotropic filter optimization
/// </summary>
[Description("Texture filtering - Anisotropic filter optimization")]
PerformanceStateTextureFilteringBiLinearInAnisotropic = 0x84CD70,
/// <summary>
/// Texture filtering - Trilinear optimization
/// </summary>
[Description("Texture filtering - Trilinear optimization")]
PerformanceStateTextureFilteringDisableTrilinearSlope = 0x2ECAF2,
/// <summary>
/// Texture filtering - Negative LOD bias
/// </summary>
[Description("Texture filtering - Negative LOD bias")]
PerformanceStateTextureFilteringNoNegativeLODBias = 0x19BB68,
/// <summary>
/// Texture filtering - Quality
/// </summary>
[Description("Texture filtering - Quality")]
QualityEnhancements = 0xCE2691,
/// <summary>
/// Preferred refresh rate
/// </summary>
[Description("Preferred refresh rate")]
RefreshRateOverride = 0x64B541,
/// <summary>
/// PowerThrottle
/// </summary>
[Description("PowerThrottle")] SetPowerThrottleForPCIeCompliance = 0xAE785C,
/// <summary>
/// VAB Default Data
/// </summary>
[Description("VAB Default Data")] SetVABData = 0xAB8687,
/// <summary>
/// Vertical Sync
/// </summary>
[Description("Vertical Sync")] VSyncMode = 0xA879CF,
/// <summary>
/// Vertical Sync Tear Control
/// </summary>
[Description("Vertical Sync Tear Control")]
VSyncTearControl = 0x5A375C,
InvalidSetting = 0xFFFFFFFF
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,424 @@
using System;
using NvAPIWrapper.Native;
using NvAPIWrapper.Native.DRS.Structures;
using NvAPIWrapper.Native.Exceptions;
using NvAPIWrapper.Native.Interfaces.DRS;
namespace NvAPIWrapper.DRS
{
/// <summary>
/// Represents an application rule registered in a profile
/// </summary>
public class ProfileApplication
{
private IDRSApplication _application;
internal ProfileApplication(IDRSApplication application, DriverSettingsProfile profile)
{
Profile = profile;
_application = application;
}
/// <summary>
/// Gets the application name
/// </summary>
public string ApplicationName
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
return _application.ApplicationName;
}
}
/// <summary>
/// Gets the application command line
/// </summary>
public string CommandLine
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
if (_application is DRSApplicationV4 applicationV4)
{
return applicationV4.ApplicationCommandLine;
}
return null;
}
}
/// <summary>
/// Gets a list of files that are necessary to be present inside the application parent directory
/// </summary>
public string[] FilesInFolder
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
if (_application is DRSApplicationV2 applicationV2)
{
return applicationV2.FilesInFolder;
}
if (_application is DRSApplicationV3 applicationV3)
{
return applicationV3.FilesInFolder;
}
if (_application is DRSApplicationV4 applicationV4)
{
return applicationV4.FilesInFolder;
}
return null;
}
}
/// <summary>
/// Gets the application friendly name
/// </summary>
public string FriendlyName
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
return _application.FriendlyName;
}
}
/// <summary>
/// Gets a boolean value indicating if this application rule needs a specific command line; or <see langword="null" />
/// if this information is not available.
/// </summary>
public bool? HasCommandLine
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
if (_application is DRSApplicationV3 applicationV3)
{
return applicationV3.HasCommandLine;
}
if (_application is DRSApplicationV4 applicationV4)
{
return applicationV4.HasCommandLine;
}
return null;
}
}
/// <summary>
/// Gets a boolean value indicating if this application is a metro application; or <see langword="null" /> if this
/// information is not available.
/// </summary>
public bool? IsMetroApplication
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
if (_application is DRSApplicationV3 applicationV3)
{
return applicationV3.IsMetroApplication;
}
if (_application is DRSApplicationV4 applicationV4)
{
return applicationV4.IsMetroApplication;
}
return null;
}
}
/// <summary>
/// Gets a boolean value indicating if this application is predefined by the NVIDIA driver
/// </summary>
public bool IsPredefined
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
return _application.IsPredefined;
}
}
/// <summary>
/// Gets a boolean value indicating if this instance of <see cref="ProfileApplication" /> is a valid instance
/// representing an application in a profile
/// </summary>
public bool IsValid
{
get => _application != null && Profile.IsValid;
}
/// <summary>
/// Gets the application launcher name
/// </summary>
public string LauncherName
{
get
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
return _application.LauncherName;
}
}
/// <summary>
/// Gets the parent profile instance
/// </summary>
public DriverSettingsProfile Profile { get; }
/// <summary>
/// Creates a new application
/// </summary>
/// <param name="profile">The profile to create the new application in.</param>
/// <param name="applicationName">The application name (with extension).</param>
/// <param name="friendlyName">The application friendly name.</param>
/// <param name="launcherName">The application launcher name.</param>
/// <param name="fileInFolders">An array of files necessary to be present inside the application parent directory.</param>
/// <param name="isMetro">A boolean value indicating if this application is a metro application.</param>
/// <param name="commandLine">The application command line string.</param>
/// <returns>A new instance of <see cref="ProfileApplication" /> representing the newly created application.</returns>
// ReSharper disable once TooManyArguments
// ReSharper disable once FunctionComplexityOverflow
public static ProfileApplication CreateApplication(
DriverSettingsProfile profile,
string applicationName,
string friendlyName = null,
string launcherName = null,
string[] fileInFolders = null,
bool isMetro = false,
string commandLine = null
)
{
var createDelegates = new Func<string, string, string, string[], bool, string, IDRSApplication>[]
{
CreateApplicationInstanceV4,
CreateApplicationInstanceV3,
CreateApplicationInstanceV2,
CreateApplicationInstanceV1
};
Exception lastException = null;
IDRSApplication application = null;
foreach (var func in createDelegates)
{
try
{
// ReSharper disable once EventExceptionNotDocumented
application = func(
applicationName,
friendlyName,
launcherName,
fileInFolders,
isMetro,
commandLine
);
break;
}
catch (NVIDIANotSupportedException e)
{
// ignore
lastException = e;
}
}
if (application == null)
{
// ReSharper disable once ThrowingSystemException
throw lastException;
}
application = DRSApi.CreateApplication(profile.Session.Handle, profile.Handle, application);
return new ProfileApplication(application, profile);
}
// ReSharper disable once TooManyArguments
private static IDRSApplication CreateApplicationInstanceV1(
string applicationName,
string friendlyName = null,
string launcherName = null,
string[] fileInFolders = null,
bool isMetro = false,
string commandLine = null
)
{
if (!string.IsNullOrWhiteSpace(commandLine))
{
throw new NotSupportedException(
"CommandLine is not supported with the current execution environment."
);
}
if (fileInFolders?.Length > 0)
{
throw new NotSupportedException(
"Same folder file presence check is not supported with the current execution environment."
);
}
return new DRSApplicationV1(
applicationName,
friendlyName,
launcherName
);
}
// ReSharper disable once TooManyArguments
private static IDRSApplication CreateApplicationInstanceV2(
string applicationName,
string friendlyName = null,
string launcherName = null,
string[] fileInFolders = null,
bool isMetro = false,
string commandLine = null
)
{
if (!string.IsNullOrWhiteSpace(commandLine))
{
throw new NotSupportedException(
"CommandLine is not supported with the current execution environment."
);
}
return new DRSApplicationV2(
applicationName,
friendlyName,
launcherName,
fileInFolders
);
}
// ReSharper disable once TooManyArguments
private static IDRSApplication CreateApplicationInstanceV3(
string applicationName,
string friendlyName = null,
string launcherName = null,
string[] fileInFolders = null,
bool isMetro = false,
string commandLine = null
)
{
if (!string.IsNullOrWhiteSpace(commandLine))
{
throw new NotSupportedException(
"CommandLine is not supported with the current execution environment."
);
}
return new DRSApplicationV3(
applicationName,
friendlyName,
launcherName,
fileInFolders,
isMetro
);
}
// ReSharper disable once TooManyArguments
private static IDRSApplication CreateApplicationInstanceV4(
string applicationName,
string friendlyName = null,
string launcherName = null,
string[] fileInFolders = null,
bool isMetro = false,
string commandLine = null
)
{
return new DRSApplicationV4(
applicationName,
friendlyName,
launcherName,
fileInFolders,
isMetro,
commandLine
);
}
/// <inheritdoc />
public override string ToString()
{
if (!IsValid)
{
return "[Invalid]";
}
if (IsPredefined)
{
return $"{ApplicationName} (Predefined)";
}
return ApplicationName;
}
/// <summary>
/// Deletes this application and makes this instance invalid
/// </summary>
public void Delete()
{
if (!IsValid)
{
throw new InvalidOperationException(
"Can not perform this operation with an invalid application instance."
);
}
DRSApi.DeleteApplication(Profile.Session.Handle, Profile.Handle, _application);
_application = null;
}
}
}

View File

@@ -0,0 +1,126 @@
using System;
using NvAPIWrapper.Native.DRS;
using NvAPIWrapper.Native.DRS.Structures;
namespace NvAPIWrapper.DRS
{
/// <summary>
/// Represents a profile setting and its value
/// </summary>
public class ProfileSetting
{
private readonly DRSSettingV1 _setting;
internal ProfileSetting(DRSSettingV1 setting)
{
_setting = setting;
}
/// <summary>
/// Gets the current value of the setting
/// </summary>
public object CurrentValue
{
get
{
if (IsPredefinedValueValid && IsCurrentValuePredefined)
{
return _setting.PredefinedValue;
}
return _setting.CurrentValue;
}
}
/// <summary>
/// Gets a boolean value indicating if the current value is the predefined value.
/// </summary>
public bool IsCurrentValuePredefined
{
get => _setting.IsCurrentValuePredefined;
}
/// <summary>
/// Gets a boolean value indicating if this setting had a predefined valid value.
/// </summary>
public bool IsPredefinedValueValid
{
get => _setting.IsPredefinedValueValid;
}
/// <summary>
/// Gets the predefined value of this setting.
/// </summary>
public object PredefinedValue
{
get
{
if (!IsPredefinedValueValid)
{
throw new InvalidOperationException("Predefined value is not valid.");
}
return _setting.PredefinedValue;
}
}
/// <summary>
/// Gets the setting identification number
/// </summary>
public uint SettingId
{
get => _setting.Id;
}
/// <summary>
/// Gets additional information regarding this setting including possible valid values
/// </summary>
public SettingInfo SettingInfo
{
get => SettingInfo.FromId(SettingId);
}
/// <summary>
/// Gets the profile location of this setting
/// </summary>
public DRSSettingLocation SettingLocation
{
get => _setting.SettingLocation;
}
/// <summary>
/// Gets the value type of this setting
/// </summary>
public DRSSettingType SettingType
{
get => _setting.SettingType;
}
/// <inheritdoc />
public override string ToString()
{
string settingName = null;
try
{
settingName = SettingInfo.Name;
}
catch
{
// ignore;
}
if (string.IsNullOrWhiteSpace(settingName))
{
settingName = $"#{SettingId:X}";
}
if (IsCurrentValuePredefined)
{
return $"{settingName} = {CurrentValue ?? "[NULL]"} (Predefined)";
}
return $"{settingName} = {CurrentValue ?? "[NULL]"}";
}
}
}

View File

@@ -0,0 +1,360 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using NvAPIWrapper.Native;
using NvAPIWrapper.Native.DRS;
namespace NvAPIWrapper.DRS
{
/// <summary>
/// Contains information about a setting
/// </summary>
public class SettingInfo
{
private static uint[] _availableSettingIds;
private SettingInfo(uint settingId)
{
SettingId = settingId;
}
/// <summary>
/// Gets an array of available possible valid values.
/// </summary>
public object[] AvailableValues
{
get
{
if (!IsAvailable)
{
return null;
}
return DRSApi.EnumAvailableSettingValues(SettingId).Values;
}
}
/// <summary>
/// Gets the default value of this setting
/// </summary>
public object DefaultValue
{
get
{
if (!IsAvailable)
{
return null;
}
var values = DRSApi.EnumAvailableSettingValues(SettingId);
return values.DefaultValue;
}
}
/// <summary>
/// Gets a boolean value indicating if this setting is available on this machine and with the current version of NVIDIA
/// driver
/// </summary>
public bool IsAvailable
{
get => GetAvailableSetting().Any(info => info.SettingId == SettingId);
}
/// <summary>
/// Gets a boolean value indicating if this setting is know by this library
/// </summary>
public bool IsKnown
{
get => IsSettingKnown(SettingId);
}
/// <summary>
/// Gets the description of this setting from the library or <see langword="null" /> if this setting is not known by
/// the library.
/// </summary>
public string KnownDescription
{
get
{
if (!IsKnown || KnownSettingId == null)
{
return null;
}
return GetSettingDescription(KnownSettingId.Value);
}
}
/// <summary>
/// Gets the known identification number of this setting from the library or <see langword="null" /> if this setting is
/// not known by the library.
/// </summary>
public KnownSettingId? KnownSettingId
{
get
{
if (!IsKnown)
{
return null;
}
return GetKnownSettingId(SettingId);
}
}
/// <summary>
/// Gets the type of a static class or an enum containing possible known values for this setting from the library or
/// <see langword="null" /> if this setting is not known by the library
/// </summary>
public Type KnownValueType
{
get
{
if (!IsKnown || !IsAvailable)
{
return null;
}
var name = KnownSettingId.ToString();
var nameSpace = typeof(SettingInfo).Namespace + ".SettingValues";
if (SettingType == DRSSettingType.Integer)
{
return Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(type =>
type.IsEnum &&
type.Namespace?.Equals(nameSpace, StringComparison.InvariantCultureIgnoreCase) == true &&
type.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
}
if (SettingType == DRSSettingType.String || SettingType == DRSSettingType.UnicodeString)
{
return Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(type =>
type.IsClass &&
type.Namespace?.Equals(nameSpace, StringComparison.InvariantCultureIgnoreCase) == true &&
type.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
}
return null;
}
}
/// <summary>
/// Gets the name of the setting from NVIDIA driver or <see langword="null" /> if the setting is not available on this
/// machine.
/// </summary>
public string Name
{
get
{
if (!IsAvailable)
{
return null;
}
return DRSApi.GetSettingNameFromId(SettingId);
}
}
/// <summary>
/// Gets the setting identification number
/// </summary>
public uint SettingId { get; }
/// <summary>
/// Gets the value type of the setting from NVIDIA driver or <see langword="null" /> if the setting is not available on
/// this machine.
/// </summary>
public DRSSettingType? SettingType
{
get
{
if (!IsAvailable)
{
return null;
}
var values = DRSApi.EnumAvailableSettingValues(SettingId);
return values.SettingType;
}
}
/// <summary>
/// Gets information regarding a setting from its identification number.
/// </summary>
/// <param name="settingId">The identification number of the setting to get information about.</param>
/// <returns>An instance of <see cref="SettingInfo" /> containing information about the setting.</returns>
public static SettingInfo FromId(uint settingId)
{
return new SettingInfo(settingId);
}
/// <summary>
/// Gets information regarding a setting from its known identification number.
/// </summary>
/// <param name="settingId">The known identification number of the setting to get information about.</param>
/// <returns>An instance of <see cref="SettingInfo" /> containing information about the setting.</returns>
public static SettingInfo FromKnownSettingId(KnownSettingId settingId)
{
return FromId(GetSettingId(settingId));
}
/// <summary>
/// Gets information regarding a setting from its name.
/// </summary>
/// <param name="settingName">The name of the setting to get information about.</param>
/// <returns>An instance of <see cref="SettingInfo" /> containing information about the setting.</returns>
public static SettingInfo FromName(string settingName)
{
var settingId = DRSApi.GetSettingIdFromName(settingName);
return FromId(settingId);
}
/// <summary>
/// Gets a list of all available setting on this machine
/// </summary>
/// <returns>Instances of <see cref="SettingInfo" /> each representing a available setting on this machine.</returns>
public static SettingInfo[] GetAvailableSetting()
{
if (_availableSettingIds == null)
{
_availableSettingIds = DRSApi.EnumAvailableSettingIds();
}
return _availableSettingIds.Select(FromId).ToArray();
}
/// <summary>
/// Gets the known identification number of a setting from its identification number
/// </summary>
/// <param name="settingId">The setting identification number.</param>
/// <returns>The known setting identification number if the setting is known; otherwise <see langword="null" />.</returns>
public static KnownSettingId? GetKnownSettingId(uint settingId)
{
if (!IsSettingKnown(settingId))
{
return null;
}
return (KnownSettingId) settingId;
}
/// <summary>
/// Gets the known setting description from its identification number
/// </summary>
/// <param name="knownSettingId">The known setting identification number.</param>
/// <returns>The known setting description if available; otherwise <see langword="null" />.</returns>
public static string GetSettingDescription(KnownSettingId knownSettingId)
{
var enumName = Enum.GetName(typeof(KnownSettingId), knownSettingId);
if (enumName == null)
{
return null;
}
var enumField = typeof(KnownSettingId).GetField(enumName);
if (enumField == null)
{
return null;
}
var descriptionAttribute = enumField
.GetCustomAttributes(typeof(DescriptionAttribute), false)
.OfType<DescriptionAttribute>()
.FirstOrDefault();
if (string.IsNullOrWhiteSpace(descriptionAttribute?.Description))
{
return null;
}
return descriptionAttribute.Description;
}
/// <summary>
/// Gets the identification number of a setting from its known identification number
/// </summary>
/// <param name="knownSettingId">The known setting identification number.</param>
/// <returns>The setting identification number.</returns>
public static uint GetSettingId(KnownSettingId knownSettingId)
{
return (uint) knownSettingId;
}
/// <summary>
/// Checks if a setting is known by this library.
/// </summary>
/// <param name="settingId">The setting identification number.</param>
/// <returns>true if setting is known by this library; otherwise false.</returns>
public static bool IsSettingKnown(uint settingId)
{
return Enum.IsDefined(typeof(KnownSettingId), settingId);
}
/// <inheritdoc />
public override string ToString()
{
try
{
var settingName = Name;
if (!string.IsNullOrWhiteSpace(settingName))
{
return settingName;
}
}
catch
{
// ignore;
}
return $"#{SettingId:X}";
}
/// <summary>
/// Tries to resolve the name of a known value using its actual value
/// </summary>
/// <param name="value">The actual value</param>
/// <returns>The name of the known value member.</returns>
public string ResolveKnownValueName(object value)
{
if (!IsKnown)
{
return null;
}
var valueType = KnownValueType;
if (valueType == null)
{
return null;
}
if (valueType.IsEnum)
{
return Enum.GetName(valueType, value);
}
var comparerType = typeof(EqualityComparer<>).MakeGenericType(value.GetType());
var comparer = comparerType.GetProperty(nameof(EqualityComparer<object>.Default))?.GetValue(null);
if (!(comparer is IEqualityComparer equalityComparer))
{
return null;
}
return valueType.GetFields()
.FirstOrDefault(info =>
info.IsStatic &&
equalityComparer.Equals(info.GetValue(null), value)
)?.Name;
}
}
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AmbientOcclusionMode : uint
{
Off = 0x0,
Low = 0x1,
Medium = 0x2,
High = 0x3,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AmbientOcclusionModeActive : uint
{
Disabled = 0x0,
Enabled = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AnisotropicModeLevel : uint
{
Mask = 0xFFFF,
NonePoint = 0x0,
NoneLinear = 0x1,
Maximum = 0x10,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AnisotropicModeSelector : uint
{
Mask = 0xF,
Application = 0x0,
User = 0x1,
Condition = 0x2,
Maximum = 0x2,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AnselAllow : uint
{
Disallowed = 0x0,
Allowed = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AnselEnable : uint
{
Off = 0x0,
On = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AnselWhiteListed : uint
{
Disallowed = 0x0,
Allowed = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,43 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AntiAliasingBehaviorFlags : uint
{
None = 0x0,
TreatOverrideAsApplicationControlled = 0x1,
TreatOverrideAsEnhance = 0x2,
DisableOverride = 0x3,
TreatEnhanceAsApplicationControlled = 0x4,
TreatEnhanceAsOverride = 0x8,
DisableEnhance = 0xC,
MapVCAAToMultiSampling = 0x10000,
SLIDisableTransparencySupersampling = 0x20000,
DisableCplaa = 0x40000,
SkipRTDIMCheckForEnhance = 0x80000,
DisableSLIAntiAliasing = 0x100000,
Default = 0x0,
AntiAliasingRTBPPDIV4 = 0xF0000000,
AntiAliasingRTBPPDIV4Shift = 0x1C,
NonAntiAliasingRTBPPDIV4 = 0xF000000,
NonAntiAliasingRTBPPDIV4Shift = 0x18,
Mask = 0xFF1F000F
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AntiAliasingModeAlphaToCoverage : uint
{
ModeMask = 0x4,
ModeOff = 0x0,
ModeOn = 0x4,
ModeMaximum = 0x4,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,23 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AntiAliasingModeGammaCorrection : uint
{
Mask = 0x3,
Off = 0x0,
OnIfFOS = 0x1,
OnAlways = 0x2,
Maximum = 0x2,
Default = 0x0,
DefaultTesla = 0x2,
DefaultFermi = 0x2
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,109 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AntiAliasingModeMethod : uint
{
None = 0x0,
SuperSample2XHorizontal = 0x1,
SuperSample2XVertical = 0x2,
SuperSample15X15 = 0x2,
Free0X03 = 0x3,
Free0X04 = 0x4,
SuperSample4X = 0x5,
SuperSample4XBias = 0x6,
SuperSample4XGaussian = 0x7,
Free0X08 = 0x8,
Free0X09 = 0x9,
SuperSample9X = 0xA,
SuperSample9XBias = 0xB,
SuperSample16X = 0xC,
SuperSample16XBias = 0xD,
MultiSample2XDiagonal = 0xE,
MultiSample2XQuincunx = 0xF,
MultiSample4X = 0x10,
Free0X11 = 0x11,
MultiSample4XGaussian = 0x12,
MixedSample4XSkewed4Tap = 0x13,
Free0X14 = 0x14,
Free0X15 = 0x15,
MixedSample6X = 0x16,
MixedSample6XSkewed6Tap = 0x17,
MixedSample8X = 0x18,
MixedSample8XSkewed8Tap = 0x19,
MixedSample16X = 0x1A,
MultiSample4XGamma = 0x1B,
MultiSample16X = 0x1C,
VCAA32X8V24 = 0x1D,
CorruptionCheck = 0x1E,
_6XCT = 0x1F,
MultiSample2XDiagonalGamma = 0x20,
SuperSample4XGamma = 0x21,
MultiSample4XFosgamma = 0x22,
MultiSample2XDiagonalFosgamma = 0x23,
SuperSample4XFosgamma = 0x24,
MultiSample8X = 0x25,
VCAA8X4V4 = 0x26,
VCAA16X4V12 = 0x27,
VCAA16X8V8 = 0x28,
MixedSample32X = 0x29,
SuperVCAA64X4V12 = 0x2A,
SuperVCAA64X8V8 = 0x2B,
MixedSample64X = 0x2C,
MixedSample128X = 0x2D,
Count = 0x2E,
MethodMask = 0xFFFF,
MethodMaximum = 0xF1C57815,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,49 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AntiAliasingModeReplay : uint
{
SamplesMask = 0x70,
SamplesOne = 0x0,
SamplesTwo = 0x10,
SamplesFour = 0x20,
SamplesEight = 0x30,
SamplesMaximum = 0x30,
ModeMask = 0xF,
ModeOff = 0x0,
ModeAlphaTest = 0x1,
ModePixelKill = 0x2,
ModeDynamicBranch = 0x4,
ModeOptimal = 0x4,
ModeAll = 0x8,
ModeMaximum = 0xF,
Transparency = 0x23,
DisAllowTraa = 0x100,
TransparencyDefault = 0x0,
TransparencyDefaultTesla = 0x0,
TransparencyDefaultFermi = 0x0,
Mask = 0x17F,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AntiAliasingModeSelector : uint
{
Mask = 0x3,
ApplicationControl = 0x0,
Override = 0x1,
Enhance = 0x2,
Maximum = 0x2,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AntiAliasingModeSelectorSLIAntiAliasing : uint
{
Disabled = 0x0,
Enabled = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,21 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum ApplicationProfileNotificationTimeOut : uint
{
Disabled = 0x0,
NineSeconds = 0x9,
FifteenSeconds = 0xF,
ThirtySeconds = 0x1E,
OneMinute = 0x3C,
TwoMinutes = 0x78,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum AutoLODBiasAdjust : uint
{
Off = 0x0,
On = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum BatteryBoost : uint
{
Minimum = 0x1,
Maximum = 0xFF,
Enabled = 0x10000000,
Disabled = 0x0,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,10 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public static class CUDAExcludedGPUs
{
public const string Default = "none";
public const string None = "none";
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum ControlPanelHiddenProfile : uint
{
Disabled = 0x0,
Enabled = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,10 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public static class D3DOpenGLGPUMaximumPower
{
public const string Default = "0";
public const string DefaultPower = "0";
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum ExportPerformanceCounters : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum ExportPerformanceCountersDX9Only : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum FXAAAllow : uint
{
Disallowed = 0x0,
Allowed = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum FXAAEnable : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum FXAAIndicatorEnable : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum LODBiasAdjust : uint
{
Minimum = 0xFFFFFF80,
Maximum = 0x80,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum MCSFRShowSplit : uint
{
Disabled = 0x34534064,
Enabled = 0x24545582,
Default = 0x34534064
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum MaxwellBSampleInterleave : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum NvidiaQualityUpScaling : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLAntiAliasingLineGamma : uint
{
Disabled = 0x10,
Enabled = 0x23,
Minimum = 0x1,
Maximum = 0x64,
Default = 0x10
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLDeepColorScanOut : uint
{
Disable = 0x0,
Enable = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,27 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLDefaultSwapInterval : uint
{
Tear = 0x0,
VSyncOne = 0x1,
VSync = 0x1,
ValueMask = 0xFFFF,
ForceMask = 0xF0000000,
ForceOff = 0xF0000000,
ForceOn = 0x10000000,
ApplicationControlled = 0x0,
Disable = 0xFFFFFFFF,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLDefaultSwapIntervalFractional : uint
{
ZeroScanLines = 0x0,
OneFullFrameOfScanLines = 0x64,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLDefaultSwapIntervalSign : uint
{
Positive = 0x0,
Negative = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLEventLogSeverityThreshold : uint
{
Disable = 0x0,
Critical = 0x1,
Warning = 0x2,
Information = 0x3,
All = 0x4,
Default = 0x4
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLForceBlit : uint
{
On = 0x1,
Off = 0x0,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLForceStereo : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,12 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public static class OpenGLImplicitGPUAffinity
{
public const string AutoSelect = "autoselect";
public const string Default = "autoselect";
public const string EnvironmentVariable = "OGL_DEFAULT_RENDERING_GPU";
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLOverlayPixelType : uint
{
None = 0x0,
CI = 0x1,
RGBA = 0x2,
CIAndRGBA = 0x3,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLOverlaySupport : uint
{
Off = 0x0,
On = 0x1,
ForceSoftware = 0x2,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLQualityEnhancements : uint
{
HighQuality = 0xFFFFFFF6,
Quality = 0x0,
Performance = 0xA,
HighPerformance = 0x14,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLSLIMulticast : uint
{
Disable = 0x0,
Enable = 0x1,
ForceDisable = 0x2,
AllowMosaic = 0x4,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLSingleBackDepthBuffer : uint
{
Disable = 0x0,
Enable = 0x1,
UseHardwareDefault = 0xFFFFFFFF,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,21 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLTMONLevel : uint
{
Disable = 0x0,
Critical = 0x1,
Warning = 0x2,
Information = 0x3,
Most = 0x4,
Verbose = 0x5,
Default = 0x4
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLThreadControl : uint
{
Enable = 0x1,
Disable = 0x2,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OpenGLTripleBuffer : uint
{
Disabled = 0x0,
Enabled = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum OptimusMaximumAntiAliasing : uint
{
Minimum = 0x0,
Maximum = 0x10,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,47 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateFrameRateLimiter : uint
{
Disabled = 0x0,
FPS20 = 0x14,
FPS30 = 0x1E,
FPS40 = 0x28,
Fpsmask = 0xFF,
NoAlign = 0x4000,
BBQM = 0x8000,
LowerFPSToAlign = 0x20000,
ForceVSyncOff = 0x40000,
GpsWeb = 0x80000,
Disallowed = 0x200000,
UseCPUWait = 0x400000,
NoLagOffset = 0x800000,
Accurate = 0x10000000,
AllowWindowed = 0x20000000,
ForceOn = 0x40000000,
Enabled = 0x80000000,
OpenGLRemoteDesktop = 0xE000003C,
Mask = 0xF0EEC0FF,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,27 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateFrameRateLimiter2Control : uint
{
DelayCE = 0x0,
Delay3D = 0x1,
AvoidNoop = 0x2,
DelayCEPresent3D = 0x8,
AllowAllMaxwell = 0x10,
AllowAll = 0x20,
ForceOff = 0x40,
EnableVCE = 0x80,
DefaultForGM10X = 0x11,
Default = 0x88
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,31 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateFrameRateLimiterGpsControl : uint
{
Disabled = 0x0,
DecreaseFilterMask = 0x1FF,
PauseTimeMask = 0xFE00,
PauseTimeShift = 0x9,
TargetRenderTimeMask = 0xFF0000,
TargetRenderTimeShift = 0x10,
PerformanceStepSizeMask = 0x1F000000,
PerformanceStepSizeShift = 0x18,
IncreaseFilterMask = 0xE0000000,
IncreaseFilterShift = 0x1D,
OptimalSetting = 0x4A5A3219,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,39 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateFrameRateMonitorControl : uint
{
Disabled = 0x0,
ThresholdPctMask = 0xFF,
MovingAverageXMask = 0xF00,
MovingAverageXShift = 0x8,
EnableFineGrained = 0x400000,
EnableOnVSync = 0x800000,
VSyncOffsetMask = 0xF000,
VSyncOffsetShift = 0xC,
FPSUseFrl = 0x0,
FPS30 = 0x1E000000,
FPS60 = 0x3C000000,
FPSMask = 0xFF000000,
FPSShift = 0x18,
OptimalSetting = 0x364,
VSyncOptimalSetting = 0x80F364,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateShaderDiskCache : uint
{
Off = 0x0,
On = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateTextureFilteringAnisotropicOptimization : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateTextureFilteringBiLinearInAnisotropic : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateTextureFilteringDisableTrilinearSlope : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PerformanceStateTextureFilteringNoNegativeLODBias : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PhysxIndicator : uint
{
Disabled = 0x34534064,
Enabled = 0x24545582,
Default = 0x34534064
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PreRenderLimit : uint
{
Minimum = 0x0,
Maximum = 0xFF,
ApplicationControlled = 0x0,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,25 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PreferredPerformanceState : uint
{
Adaptive = 0x0,
PreferMaximum = 0x1,
DriverControlled = 0x2,
PreferConsistentPerformance = 0x3,
PreferMinimum = 0x4,
OptimalPower = 0x5,
Minimum = 0x0,
Maximum = 0x5,
Default = 0x5
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum PreventUiAnisotropicOverride : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,17 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum QualityEnhancements : uint
{
HighQuality = 0xFFFFFFF6,
Quality = 0x0,
Performance = 0xA,
HighPerformance = 0x14,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum RefreshRateOverride : uint
{
ApplicationControlled = 0x0,
HighestAvailable = 0x1,
LowLatencyRefreshRateMask = 0xFF0,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SLIGPUCount : uint
{
AutoSelect = 0x0,
One = 0x1,
Two = 0x2,
Three = 0x3,
Four = 0x4,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SLIPredefinedGPUCount : uint
{
AutoSelect = 0x0,
One = 0x1,
Two = 0x2,
Three = 0x3,
Four = 0x4,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SLIPredefinedGPUCountDX10 : uint
{
AutoSelect = 0x0,
One = 0x1,
Two = 0x2,
Three = 0x3,
Four = 0x4,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,21 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SLIPredefinedMode : uint
{
AutoSelect = 0x0,
ForceSingle = 0x1,
ForceAFR = 0x2,
ForceAFR2 = 0x3,
ForceSFR = 0x4,
ForceAFROfSFRFallback3AFR = 0x5,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,21 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SLIPredefinedModeDX10 : uint
{
AutoSelect = 0x0,
ForceSingle = 0x1,
ForceAFR = 0x2,
ForceAFR2 = 0x3,
ForceSFR = 0x4,
ForceAFROfSFRFallback3AFR = 0x5,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,21 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SLIRenderingMode : uint
{
AutoSelect = 0x0,
ForceSingle = 0x1,
ForceAFR = 0x2,
ForceAFR2 = 0x3,
ForceSFR = 0x4,
ForceAFROfSFRFallback3AFR = 0x5,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SetPowerThrottleForPCIeCompliance : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,21 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum SetVABData : uint
{
Zero = 0x0,
UIntOne = 0x1,
FloatOne = 0x3F800000,
FloatPosInf = 0x7F800000,
FloatNan = 0x7FC00000,
UseAPIDefaults = 0xFFFFFFFF,
Default = 0xFFFFFFFF
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,25 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum ShimMCCOMPAT : uint
{
Integrated = 0x0,
Enable = 0x1,
UserEditable = 0x2,
Mask = 0x3,
VideoMask = 0x4,
VaryingBit = 0x8,
AutoSelect = 0x10,
OverrideBit = 0x80000000,
Default = 0x10
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,25 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum ShimRenderingMode : uint
{
Integrated = 0x0,
Enable = 0x1,
UserEditable = 0x2,
Mask = 0x3,
VideoMask = 0x4,
VaryingBit = 0x8,
AutoSelect = 0x10,
OverrideBit = 0x80000000,
Default = 0x10
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,59 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum ShimRenderingOptions : uint
{
DefaultRenderingMode = 0x0,
DisableAsyncPresent = 0x1,
EHShellDetect = 0x2,
FlashplayerHostDetect = 0x4,
VideoDRMApplicationDetect = 0x8,
IgnoreOverrides = 0x10,
Reserved1 = 0x20,
EnableDWMAsyncPresent = 0x40,
Reserved2 = 0x80,
AllowInheritance = 0x100,
DisableWrappers = 0x200,
DisableDxgiWrappers = 0x400,
PruneUnsupportedFormats = 0x800,
EnableAlphaFormat = 0x1000,
IGPUTranscoding = 0x2000,
DisableCUDA = 0x4000,
AllowCpCapabilitiesForVideo = 0x8000,
IGPUTranscodingFwdOptimus = 0x10000,
DisableDuringSecureBoot = 0x20000,
InvertForQuadro = 0x40000,
InvertForMSHybrid = 0x80000,
RegisterProcessEnableGold = 0x100000,
HandleWindowedModePerformanceOptimal = 0x200000,
HandleWin7AsyncRuntimeBug = 0x400000,
ExplicitAdapterOptedByApplication = 0x800000,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VRPreRenderLimit : uint
{
Minimum = 0x0,
Maximum = 0xFF,
ApplicationControlled = 0x0,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VRRApplicationOverride : uint
{
Allow = 0x0,
ForceOff = 0x1,
DisAllow = 0x2,
ULMB = 0x3,
FixedRefresh = 0x4,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,19 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VRRApplicationOverrideRequestState : uint
{
Allow = 0x0,
ForceOff = 0x1,
DisAllow = 0x2,
ULMB = 0x3,
FixedRefresh = 0x4,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VRRFeatureIndicator : uint
{
Disabled = 0x0,
Enabled = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VRRMode : uint
{
Disabled = 0x0,
FullScreenOnly = 0x1,
FullScreenAndWindowed = 0x2,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VRROverlayIndicator : uint
{
Disabled = 0x0,
Enabled = 0x1,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VRRRequestState : uint
{
Disabled = 0x0,
FullScreenOnly = 0x1,
FullScreenAndWindowed = 0x2,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VSyncBehaviorFlags : uint
{
None = 0x0,
Default = 0x0,
IgnoreFlipIntervalMultiple = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,23 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VSyncMode : uint
{
Passive = 0x60925292,
ForceOff = 0x8416747,
ForceOn = 0x47814940,
FlipInterval2 = 0x32610244,
FlipInterval3 = 0x71271021,
FlipInterval4 = 0x13245256,
Virtual = 0x18888888,
Default = 0x60925292
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VSyncSmoothAFR : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VSyncTearControl : uint
{
Disable = 0x96861077,
Enable = 0x99941284,
Default = 0x96861077
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,15 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum VSyncVRRControl : uint
{
Disable = 0x0,
Enable = 0x1,
NotSupported = 0x9F95128E,
Default = 0x1
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,13 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum WKSAPIStereoEyesExchange : uint
{
Off = 0x0,
On = 0x1,
Default = 0x0
}
#pragma warning restore 1591
}

View File

@@ -0,0 +1,59 @@
namespace NvAPIWrapper.DRS.SettingValues
{
#pragma warning disable 1591
public enum WKSAPIStereoMode : uint
{
ShutterGlasses = 0x0,
VerticalInterlaced = 0x1,
Twinview = 0x2,
NV17ShutterGlassesAuto = 0x3,
NV17ShutterGlassesDAC0 = 0x4,
NV17ShutterGlassesDAC1 = 0x5,
ColorLine = 0x6,
ColorInterleaved = 0x7,
Anaglyph = 0x8,
HorizontalInterlaced = 0x9,
SideField = 0xA,
SubField = 0xB,
CheckerBoard = 0xC,
InverseCheckerBoard = 0xD,
TridelitySL = 0xE,
TridelityMV = 0xF,
SeeFront = 0x10,
StereoMirror = 0x11,
FrameSequential = 0x12,
AutodetectPassiveMode = 0x13,
AegisDTFrameSequential = 0x14,
OEMEmitterFrameSequential = 0x15,
DPInBand = 0x16,
UseHardwareDefault = 0xFFFFFFFF,
DefaultGL = 0x3,
Default = 0x0
}
#pragma warning restore 1591
}

Some files were not shown because too many files have changed in this diff Show More