diff --git a/app/Fans.cs b/app/Fans.cs
index 7c1293c2..23703606 100644
--- a/app/Fans.cs
+++ b/app/Fans.cs
@@ -1,5 +1,6 @@
using CustomControls;
using GHelper.Gpu;
+using GHelper.Mode;
using Ryzen;
using System.Diagnostics;
using System.Windows.Forms.DataVisualization.Charting;
@@ -24,6 +25,7 @@ namespace GHelper
const int fansMax = 100;
NvidiaGpuControl? nvControl = null;
+ ModeControl modeControl = new ModeControl();
public Fans()
{
@@ -243,7 +245,7 @@ namespace GHelper
private void ButtonApplyAdvanced_Click(object? sender, EventArgs e)
{
- Program.settingsForm.SetUV(true);
+ modeControl.SetUV(true);
checkApplyUV.Enabled = true;
}
@@ -331,7 +333,7 @@ namespace GHelper
Modes.Remove(mode);
FillModes();
- Program.settingsForm.SetPerformanceMode(AsusACPI.PerformanceBalanced);
+ modeControl.SetPerformanceMode(AsusACPI.PerformanceBalanced);
}
@@ -347,7 +349,7 @@ namespace GHelper
{
int mode = Modes.Add();
FillModes();
- Program.settingsForm.SetPerformanceMode(mode);
+ modeControl.SetPerformanceMode(mode);
}
public void InitMode()
@@ -366,13 +368,13 @@ namespace GHelper
Debug.WriteLine(selectedMode);
- Program.settingsForm.SetPerformanceMode((int)selectedMode);
+ modeControl.SetPerformanceMode((int)selectedMode);
}
private void TrackGPU_MouseUp(object? sender, MouseEventArgs e)
{
- Program.settingsForm.SetGPUPower();
- Program.settingsForm.SetGPUClocks(true);
+ modeControl.SetGPUPower();
+ modeControl.SetGPUClocks(true);
}
public void InitGPU()
@@ -560,7 +562,7 @@ namespace GHelper
private void TrackPower_MouseUp(object? sender, MouseEventArgs e)
{
- Program.settingsForm.AutoPower();
+ modeControl.AutoPower();
}
@@ -586,7 +588,7 @@ namespace GHelper
CheckBox chk = (CheckBox)sender;
AppConfig.SetMode("auto_apply_power", chk.Checked ? 1 : 0);
- Program.settingsForm.SetPerformanceMode();
+ modeControl.SetPerformanceMode();
}
@@ -596,7 +598,7 @@ namespace GHelper
CheckBox chk = (CheckBox)sender;
AppConfig.SetMode("auto_apply", chk.Checked ? 1 : 0);
- Program.settingsForm.SetPerformanceMode();
+ modeControl.SetPerformanceMode();
}
@@ -853,8 +855,8 @@ namespace GHelper
AppConfig.SetMode("gpu_memory", trackGPUMemory.Value);
VisualiseGPUSettings();
- Program.settingsForm.SetGPUClocks(true);
- Program.settingsForm.SetGPUPower();
+ modeControl.SetGPUClocks(true);
+ modeControl.SetGPUPower();
}
}
@@ -875,7 +877,7 @@ namespace GHelper
if (AppConfig.Is("xgm_fan"))
SaveProfile(seriesXGM, AsusFan.XGM);
- Program.settingsForm.AutoFans();
+ modeControl.AutoFans();
}
diff --git a/app/GHelper.csproj b/app/GHelper.csproj
index 5c485d0c..a35f74db 100644
--- a/app/GHelper.csproj
+++ b/app/GHelper.csproj
@@ -63,6 +63,7 @@
+
diff --git a/app/InputDispatcher.cs b/app/InputDispatcher.cs
index 9348911e..7bf2a833 100644
--- a/app/InputDispatcher.cs
+++ b/app/InputDispatcher.cs
@@ -1,4 +1,5 @@
-using HidLibrary;
+using GHelper.Mode;
+using HidLibrary;
using Microsoft.Win32;
using NAudio.CoreAudioApi;
using System.Diagnostics;
@@ -67,6 +68,8 @@ namespace GHelper
public static Keys keyProfile = Keys.F5;
public static Keys keyApp = Keys.F12;
+ static ModeControl modeControl = new ModeControl();
+
KeyboardListener listener;
KeyboardHook hook = new KeyboardHook();
@@ -283,7 +286,7 @@ namespace GHelper
if (e.Modifier == (ModifierKeys.Control | ModifierKeys.Shift))
{
- if (e.Key == keyProfile) Program.settingsForm.CyclePerformanceMode();
+ if (e.Key == keyProfile) modeControl.CyclePerformanceMode();
if (e.Key == keyApp) Program.SettingsToggle();
}
@@ -331,7 +334,7 @@ namespace GHelper
Program.settingsForm.BeginInvoke(Program.settingsForm.CycleAuraMode);
break;
case "performance":
- Program.settingsForm.BeginInvoke(Program.settingsForm.CyclePerformanceMode);
+ Program.settingsForm.BeginInvoke(modeControl.CyclePerformanceMode);
break;
case "ghelper":
Program.settingsForm.BeginInvoke(delegate
@@ -409,7 +412,7 @@ namespace GHelper
KeyProcess("m4");
return;
case 174: // FN+F5
- Program.settingsForm.BeginInvoke(Program.settingsForm.CyclePerformanceMode);
+ Program.settingsForm.BeginInvoke(modeControl.CyclePerformanceMode);
return;
case 179: // FN+F4
case 178: // FN+F4
diff --git a/app/Mode/ModeControl.cs b/app/Mode/ModeControl.cs
new file mode 100644
index 00000000..c78f8e34
--- /dev/null
+++ b/app/Mode/ModeControl.cs
@@ -0,0 +1,373 @@
+using GHelper.Gpu;
+using Ryzen;
+using System.Diagnostics;
+
+namespace GHelper.Mode
+{
+ public class ModeControl
+ {
+
+ static SettingsForm settings = Program.settingsForm;
+
+ private static bool customFans = false;
+ private static int customPower = 0;
+
+ public void AutoPerformance(bool powerChanged = false)
+ {
+ var Plugged = SystemInformation.PowerStatus.PowerLineStatus;
+
+ int mode = AppConfig.Get("performance_" + (int)Plugged);
+
+ if (mode != -1)
+ SetPerformanceMode(mode, powerChanged);
+ else
+ SetPerformanceMode(Modes.GetCurrent());
+ }
+
+ public void SetPerformanceMode(int mode = -1, bool notify = false)
+ {
+
+ int oldMode = Modes.GetCurrent();
+ if (mode < 0) mode = oldMode;
+
+ if (!Modes.Exists(mode)) mode = 0;
+
+ settings.ShowMode(mode);
+
+ Modes.SetCurrent(mode);
+
+ SetModeLabel();
+
+ if (IsManualModeRequired())
+ Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AsusACPI.PerformanceManual, "Manual Mode");
+ else
+ Program.acpi.DeviceSet(AsusACPI.PerformanceMode, Modes.GetBase(mode), "Mode");
+
+ if (AppConfig.Is("xgm_fan") && Program.acpi.IsXGConnected()) AsusUSB.ResetXGM();
+
+ if (notify)
+ {
+ try
+ {
+ settings.toast.RunToast(Modes.GetCurrentName(), SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online ? ToastIcon.Charger : ToastIcon.Battery);
+ }
+ catch
+ {
+ Debug.WriteLine("Toast error");
+ }
+ }
+
+ SetGPUClocks();
+ AutoFans();
+ AutoPower(1000);
+
+ if (AppConfig.Get("auto_apply_power_plan") != 0)
+ {
+ if (AppConfig.GetModeString("scheme") is not null)
+ NativeMethods.SetPowerScheme(AppConfig.GetModeString("scheme"));
+ else
+ NativeMethods.SetPowerScheme(Modes.GetBase(mode));
+ }
+
+ if (AppConfig.GetMode("auto_boost") != -1)
+ {
+ NativeMethods.SetCPUBoost(AppConfig.GetMode("auto_boost"));
+ }
+
+ if (NativeMethods.PowerGetEffectiveOverlayScheme(out Guid activeScheme) == 0)
+ {
+ Debug.WriteLine("Effective :" + activeScheme);
+ }
+
+ if (settings.fans != null && settings.fans.Text != "")
+ {
+ settings.fans.InitAll();
+ }
+ }
+
+
+ public void CyclePerformanceMode()
+ {
+ SetPerformanceMode(Modes.GetNext(Control.ModifierKeys == Keys.Shift), true);
+ }
+
+ public void AutoFans(bool force = false)
+ {
+ customFans = false;
+
+ if (AppConfig.IsMode("auto_apply") || force)
+ {
+
+ bool xgmFan = false;
+ if (AppConfig.Is("xgm_fan") && Program.acpi.IsXGConnected())
+ {
+ AsusUSB.SetXGMFan(AppConfig.GetFanConfig(AsusFan.XGM));
+ xgmFan = true;
+ }
+
+ int cpuResult = Program.acpi.SetFanCurve(AsusFan.CPU, AppConfig.GetFanConfig(AsusFan.CPU));
+ int gpuResult = Program.acpi.SetFanCurve(AsusFan.GPU, AppConfig.GetFanConfig(AsusFan.GPU));
+
+
+ if (AppConfig.Is("mid_fan"))
+ Program.acpi.SetFanCurve(AsusFan.Mid, AppConfig.GetFanConfig(AsusFan.Mid));
+
+
+ // something went wrong, resetting to default profile
+ if (cpuResult != 1 || gpuResult != 1)
+ {
+ int mode = Modes.GetCurrentBase();
+ Logger.WriteLine("ASUS BIOS rejected fan curve, resetting mode to " + mode);
+ Program.acpi.DeviceSet(AsusACPI.PerformanceMode, mode, "Reset Mode");
+ settings.LabelFansResult("ASUS BIOS rejected fan curve");
+ }
+ else
+ {
+ settings.LabelFansResult("");
+ customFans = true;
+ }
+
+ // force set PPTs for missbehaving bios on FX507/517 series
+ if ((AppConfig.ContainsModel("FX507") || AppConfig.ContainsModel("FX517") || xgmFan) && !AppConfig.IsMode("auto_apply_power"))
+ {
+ Task.Run(async () =>
+ {
+ await Task.Delay(TimeSpan.FromSeconds(1));
+ Program.acpi.DeviceSet(AsusACPI.PPT_TotalA0, 80, "PowerLimit Fix A0");
+ Program.acpi.DeviceSet(AsusACPI.PPT_APUA3, 80, "PowerLimit Fix A3");
+ });
+ }
+
+ }
+
+ Program.settingsForm.BeginInvoke(SetModeLabel);
+
+ }
+
+ private static bool IsManualModeRequired()
+ {
+ if (!AppConfig.IsMode("auto_apply_power"))
+ return false;
+
+ return
+ AppConfig.Is("manual_mode") ||
+ AppConfig.ContainsModel("GU603") ||
+ AppConfig.ContainsModel("GU604") ||
+ AppConfig.ContainsModel("FX517") ||
+ AppConfig.ContainsModel("G733");
+ }
+
+ public void AutoPower(int delay = 0)
+ {
+
+ customPower = 0;
+
+ bool applyPower = AppConfig.IsMode("auto_apply_power");
+ bool applyFans = AppConfig.IsMode("auto_apply");
+ //bool applyGPU = true;
+
+ if (applyPower)
+ {
+ // force fan curve for misbehaving bios PPTs on G513
+ if (AppConfig.ContainsModel("G513") && !applyFans)
+ {
+ delay = 500;
+ AutoFans(true);
+ }
+
+ // Fix for models that don't support PPT settings in all modes, setting a "manual" mode for them
+ if (IsManualModeRequired() && !applyFans)
+ {
+ AutoFans(true);
+ }
+ }
+
+ if (delay > 0)
+ {
+ var timer = new System.Timers.Timer(delay);
+ timer.Elapsed += delegate
+ {
+ timer.Stop();
+ timer.Dispose();
+
+ if (applyPower) SetPower();
+ SetGPUPower();
+ AutoUV();
+ };
+ timer.Start();
+ }
+ else
+ {
+ if (applyPower) SetPower(true);
+ SetGPUPower();
+ AutoUV();
+ }
+
+ }
+
+ public void SetModeLabel()
+ {
+ settings.SetModeLabel(Properties.Strings.PerformanceMode + ": " + Modes.GetCurrentName() + (customFans ? "+" : "") + ((customPower > 0) ? " " + customPower + "W" : ""));
+ }
+
+ public void SetPower(bool launchAsAdmin = false)
+ {
+
+ int limit_total = AppConfig.GetMode("limit_total");
+ int limit_cpu = AppConfig.GetMode("limit_cpu");
+ int limit_fast = AppConfig.GetMode("limit_fast");
+
+ if (limit_total > AsusACPI.MaxTotal) return;
+ if (limit_total < AsusACPI.MinTotal) return;
+
+ if (limit_cpu > AsusACPI.MaxCPU) return;
+ if (limit_cpu < AsusACPI.MinCPU) return;
+
+ if (limit_fast > AsusACPI.MaxTotal) return;
+ if (limit_fast < AsusACPI.MinTotal) return;
+
+ // SPL + SPPT togeher in one slider
+ if (Program.acpi.DeviceGet(AsusACPI.PPT_TotalA0) >= 0)
+ {
+ Program.acpi.DeviceSet(AsusACPI.PPT_TotalA0, limit_total, "PowerLimit A0");
+ Program.acpi.DeviceSet(AsusACPI.PPT_APUA3, limit_total, "PowerLimit A3");
+ customPower = limit_total;
+ }
+ else if (RyzenControl.IsAMD())
+ {
+
+ if (ProcessHelper.IsUserAdministrator())
+ {
+ SendCommand.set_stapm_limit((uint)limit_total * 1000);
+ SendCommand.set_stapm2_limit((uint)limit_total * 1000);
+ SendCommand.set_slow_limit((uint)limit_total * 1000);
+ SendCommand.set_fast_limit((uint)limit_total * 1000);
+ customPower = limit_total;
+ }
+ else if (launchAsAdmin)
+ {
+ ProcessHelper.RunAsAdmin("cpu");
+ return;
+ }
+ }
+
+ if (Program.acpi.IsAllAmdPPT()) // CPU limit all amd models
+ {
+ Program.acpi.DeviceSet(AsusACPI.PPT_CPUB0, limit_cpu, "PowerLimit B0");
+ customPower = limit_cpu;
+ }
+ else if (Program.acpi.DeviceGet(AsusACPI.PPT_APUC1) >= 0) // FPPT boost for non all-amd models
+ {
+ Program.acpi.DeviceSet(AsusACPI.PPT_APUC1, limit_fast, "PowerLimit C1");
+ customPower = limit_fast;
+ }
+
+
+ Program.settingsForm.BeginInvoke(SetModeLabel);
+
+ }
+
+ public void SetGPUClocks(bool launchAsAdmin = true)
+ {
+
+ int gpu_core = AppConfig.GetMode("gpu_core");
+ int gpu_memory = AppConfig.GetMode("gpu_memory");
+
+ if (gpu_core == -1 && gpu_memory == -1) return;
+
+ //if ((gpu_core > -5 && gpu_core < 5) && (gpu_memory > -5 && gpu_memory < 5)) launchAsAdmin = false;
+
+ if (Program.acpi.DeviceGet(AsusACPI.GPUEco) == 1) return;
+ if (HardwareControl.GpuControl is null) return;
+ if (!HardwareControl.GpuControl!.IsNvidia) return;
+
+ using NvidiaGpuControl nvControl = (NvidiaGpuControl)HardwareControl.GpuControl;
+ try
+ {
+ int getStatus = nvControl.GetClocks(out int current_core, out int current_memory);
+ if (getStatus != -1)
+ {
+ if (Math.Abs(gpu_core - current_core) < 5 && Math.Abs(gpu_memory - current_memory) < 5) return;
+ }
+
+ int setStatus = nvControl.SetClocks(gpu_core, gpu_memory);
+ if (launchAsAdmin && setStatus == -1) ProcessHelper.RunAsAdmin("gpu");
+
+ }
+ catch (Exception ex)
+ {
+ Logger.WriteLine(ex.ToString());
+ }
+ }
+
+ public void SetGPUPower()
+ {
+
+ int gpu_boost = AppConfig.GetMode("gpu_boost");
+ int gpu_temp = AppConfig.GetMode("gpu_temp");
+
+
+ if (gpu_boost < AsusACPI.MinGPUBoost || gpu_boost > AsusACPI.MaxGPUBoost) return;
+ if (gpu_temp < AsusACPI.MinGPUTemp || gpu_temp > AsusACPI.MaxGPUTemp) return;
+
+ if (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0)
+ {
+ Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0");
+ }
+
+ if (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0)
+ {
+ Program.acpi.DeviceSet(AsusACPI.PPT_GPUC2, gpu_temp, "PowerLimit C2");
+ }
+
+ }
+
+
+ public void AutoUV()
+ {
+ if (!AppConfig.IsMode("auto_uv")) return;
+ SetUV();
+ }
+
+ public void SetUV(bool launchAsAdmin = false)
+ {
+
+ if (!ProcessHelper.IsUserAdministrator())
+ {
+ if (launchAsAdmin) ProcessHelper.RunAsAdmin("uv");
+ return;
+ }
+
+ if (!RyzenControl.IsAMD()) return;
+
+ int cpuUV = AppConfig.GetMode("cpu_uv", 0);
+ int igpuUV = AppConfig.GetMode("igpu_uv", 0);
+ int cpuTemp = AppConfig.GetMode("cpu_temp");
+
+ try
+ {
+ if (cpuUV >= RyzenControl.MinCPUUV && cpuUV <= RyzenControl.MaxCPUUV)
+ {
+ SendCommand.set_coall(cpuUV);
+ }
+
+ if (igpuUV >= RyzenControl.MinIGPUUV && igpuUV <= RyzenControl.MaxIGPUUV)
+ {
+ SendCommand.set_cogfx(igpuUV);
+ }
+
+ if (cpuTemp >= RyzenControl.MinTemp && cpuTemp <= RyzenControl.MaxTemp)
+ {
+ SendCommand.set_tctl_temp((uint)cpuTemp);
+ SendCommand.set_apu_skin_temp_limit((uint)cpuTemp);
+ }
+
+ }
+ catch (Exception ex)
+ {
+ Logger.WriteLine("UV Error: " + ex.ToString());
+ }
+ }
+
+ }
+}
diff --git a/app/NvAPIWrapper/Display/ColorData.cs b/app/NvAPIWrapper/Display/ColorData.cs
deleted file mode 100644
index c856d815..00000000
--- a/app/NvAPIWrapper/Display/ColorData.cs
+++ /dev/null
@@ -1,200 +0,0 @@
-using System;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.Interfaces.Display;
-
-namespace NvAPIWrapper.Display
-{
- ///
- public class ColorData : IColorData, IEquatable
- {
- ///
- /// Creates an instance of to modify the color data
- ///
- /// The color data color format.
- /// The color data color space.
- /// The color data dynamic range.
- /// The color data color depth.
- /// The color data selection policy.
- /// The color data desktop color depth.
- public ColorData(
- ColorDataFormat colorFormat = ColorDataFormat.Auto,
- ColorDataColorimetry colorimetry = ColorDataColorimetry.Auto,
- ColorDataDynamicRange? dynamicRange = null,
- ColorDataDepth? colorDepth = null,
- ColorDataSelectionPolicy? colorSelectionPolicy = null,
- ColorDataDesktopDepth? desktopColorDepth = null
- )
- {
- ColorFormat = colorFormat;
- Colorimetry = colorimetry;
- DynamicRange = dynamicRange;
- ColorDepth = colorDepth;
- SelectionPolicy = colorSelectionPolicy;
- DesktopColorDepth = desktopColorDepth;
- }
-
- internal ColorData(IColorData colorData)
- {
- ColorDepth = colorData.ColorDepth;
- DynamicRange = colorData.DynamicRange;
- ColorFormat = colorData.ColorFormat;
- Colorimetry = colorData.Colorimetry;
- SelectionPolicy = colorData.SelectionPolicy;
- DesktopColorDepth = colorData.DesktopColorDepth;
- }
-
- ///
- public ColorDataDepth? ColorDepth { get; }
-
- ///
- public ColorDataFormat ColorFormat { get; }
-
- ///
- public ColorDataColorimetry Colorimetry { get; }
-
- ///
- public ColorDataDesktopDepth? DesktopColorDepth { get; }
-
- ///
- public ColorDataDynamicRange? DynamicRange { get; }
-
- ///
- public ColorDataSelectionPolicy? SelectionPolicy { get; }
-
- ///
- public bool Equals(ColorData other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return ColorDepth == other.ColorDepth &&
- ColorFormat == other.ColorFormat &&
- Colorimetry == other.Colorimetry &&
- DesktopColorDepth == other.DesktopColorDepth &&
- DynamicRange == other.DynamicRange &&
- SelectionPolicy == other.SelectionPolicy;
- }
-
- ///
- /// Compares two instances of for equality.
- ///
- /// The first instance.
- /// The second instance.
- /// true if two instances are equal; otherwise false.
- public static bool operator ==(ColorData left, ColorData right)
- {
- return left?.Equals(right) == true;
- }
-
- ///
- /// Compares two instances of for inequality.
- ///
- /// The first instance.
- /// The second instance.
- /// true if two instances are not equal; otherwise false.
- public static bool operator !=(ColorData left, ColorData right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((ColorData) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = ColorDepth.GetHashCode();
- hashCode = (hashCode * 397) ^ (int) ColorFormat;
- hashCode = (hashCode * 397) ^ (int) Colorimetry;
- hashCode = (hashCode * 397) ^ DesktopColorDepth.GetHashCode();
- hashCode = (hashCode * 397) ^ DynamicRange.GetHashCode();
- hashCode = (hashCode * 397) ^ SelectionPolicy.GetHashCode();
-
- return hashCode;
- }
- }
-
- internal ColorDataV1 AsColorDataV1(ColorDataCommand command)
- {
- return new ColorDataV1(
- command,
- ColorFormat,
- Colorimetry
- );
- }
-
- internal ColorDataV2 AsColorDataV2(ColorDataCommand command)
- {
- return new ColorDataV2(
- command,
- ColorFormat,
- Colorimetry,
- DynamicRange ?? ColorDataDynamicRange.Auto
- );
- }
-
- internal ColorDataV3 AsColorDataV3(ColorDataCommand command)
- {
- return new ColorDataV3(
- command,
- ColorFormat,
- Colorimetry,
- DynamicRange ?? ColorDataDynamicRange.Auto,
- ColorDepth ?? ColorDataDepth.Default
- );
- }
-
- internal ColorDataV4 AsColorDataV4(ColorDataCommand command)
- {
- return new ColorDataV4(
- command,
- ColorFormat,
- Colorimetry,
- DynamicRange ?? ColorDataDynamicRange.Auto,
- ColorDepth ?? ColorDataDepth.Default,
- SelectionPolicy ?? ColorDataSelectionPolicy.Default
- );
- }
-
- internal ColorDataV5 AsColorDataV5(ColorDataCommand command)
- {
- return new ColorDataV5(
- command,
- ColorFormat,
- Colorimetry,
- DynamicRange ?? ColorDataDynamicRange.Auto,
- ColorDepth ?? ColorDataDepth.Default,
- SelectionPolicy ?? ColorDataSelectionPolicy.Default,
- DesktopColorDepth ?? ColorDataDesktopDepth.Default
- );
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/CustomResolution.cs b/app/NvAPIWrapper/Display/CustomResolution.cs
deleted file mode 100644
index 8dac9a47..00000000
--- a/app/NvAPIWrapper/Display/CustomResolution.cs
+++ /dev/null
@@ -1,245 +0,0 @@
-using System;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Hold information about a custom display resolution
- ///
- public class CustomResolution : IEquatable
- {
- ///
- /// Creates an instance of .
- ///
- /// The screen width.
- /// The screen height.
- /// The color format.
- /// The resolution timing.
- /// The horizontal scaling ratio.
- /// The vertical scaling ratio.
- public CustomResolution(
- uint width,
- uint height,
- ColorFormat colorFormat,
- Timing timing,
- float xRatio = 1,
- float yRatio = 1
- )
- {
- if (xRatio <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(xRatio));
- }
-
- if (yRatio <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(yRatio));
- }
-
- Width = width;
- Height = height;
- ColorFormat = colorFormat;
- XRatio = xRatio;
- YRatio = yRatio;
- Timing = timing;
-
- switch (ColorFormat)
- {
- case ColorFormat.P8:
- ColorDepth = 8;
-
- break;
- case ColorFormat.R5G6B5:
- ColorDepth = 16;
-
- break;
- case ColorFormat.A8R8G8B8:
- ColorDepth = 24;
-
- break;
- case ColorFormat.A16B16G16R16F:
- ColorDepth = 32;
-
- break;
- default:
- throw new ArgumentException("Color format is invalid.", nameof(colorFormat));
- }
- }
-
- ///
- /// Creates an instance of .
- ///
- /// The screen width.
- /// The screen height.
- /// The color depth.
- /// The resolution timing.
- /// The horizontal scaling ratio.
- /// The vertical scaling ratio.
- public CustomResolution(
- uint width,
- uint height,
- uint colorDepth,
- Timing timing,
- float xRatio = 1,
- float yRatio = 1)
- {
- if (xRatio <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(xRatio));
- }
-
- if (yRatio <= 0)
- {
- throw new ArgumentOutOfRangeException(nameof(yRatio));
- }
-
- if (colorDepth != 0 && colorDepth != 8 && colorDepth != 16 && colorDepth != 24 && colorDepth != 32)
- {
- throw new ArgumentOutOfRangeException(nameof(colorDepth));
- }
-
- Width = width;
- Height = height;
- ColorDepth = colorDepth;
- ColorFormat = ColorFormat.Unknown;
- XRatio = xRatio;
- YRatio = yRatio;
- Timing = timing;
- }
-
- internal CustomResolution(CustomDisplay customDisplay)
- {
- Width = customDisplay.Width;
- Height = customDisplay.Height;
- ColorDepth = customDisplay.Depth;
- ColorFormat = customDisplay.ColorFormat;
- Timing = customDisplay.Timing;
- XRatio = customDisplay.XRatio;
- YRatio = customDisplay.YRatio;
- }
-
- ///
- /// Gets the source surface color depth. "0" means all 8/16/32bpp.
- ///
- public uint ColorDepth { get; }
-
- ///
- /// Gets the color format (optional)
- ///
- public ColorFormat ColorFormat { get; }
-
- ///
- /// Gets the source surface (source mode) height.
- ///
- public uint Height { get; }
-
- ///
- /// Gets the timing used to program TMDS/DAC/LVDS/HDMI/TVEncoder, etc.
- ///
- public Timing Timing { get; }
-
- ///
- /// Gets the source surface (source mode) width.
- ///
- public uint Width { get; }
-
- ///
- /// Gets the horizontal scaling ratio.
- ///
- public float XRatio { get; }
-
- ///
- /// Gets the vertical scaling ratio.
- ///
- public float YRatio { get; }
-
- ///
- public bool Equals(CustomResolution other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Width == other.Width &&
- Height == other.Height &&
- ColorDepth == other.ColorDepth &&
- Timing.Equals(other.Timing) &&
- ColorFormat == other.ColorFormat &&
- XRatio.Equals(other.XRatio) &&
- YRatio.Equals(other.YRatio);
- }
-
- ///
- /// Compares two instance of for equality.
- ///
- /// An first instance of to compare.
- /// An Second instance of to compare.
- /// True if both instances are equal, otherwise false.
- public static bool operator ==(CustomResolution left, CustomResolution right)
- {
- return Equals(left, right);
- }
-
- ///
- /// Compares two instance of for inequality.
- ///
- /// An first instance of to compare.
- /// An Second instance of to compare.
- /// True if both instances are not equal, otherwise false.
- public static bool operator !=(CustomResolution left, CustomResolution right)
- {
- return !Equals(left, right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((CustomResolution) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = (int) Width;
- hashCode = (hashCode * 397) ^ (int) Height;
- hashCode = (hashCode * 397) ^ (int) ColorDepth;
- hashCode = (hashCode * 397) ^ Timing.GetHashCode();
- hashCode = (hashCode * 397) ^ (int) ColorFormat;
- hashCode = (hashCode * 397) ^ XRatio.GetHashCode();
- hashCode = (hashCode * 397) ^ YRatio.GetHashCode();
-
- return hashCode;
- }
- }
-
- internal CustomDisplay AsCustomDisplay(bool hardwareModeSetOnly)
- {
- return new CustomDisplay(Width, Height, ColorDepth, ColorFormat, XRatio, YRatio, Timing,
- hardwareModeSetOnly);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/DVCInformation.cs b/app/NvAPIWrapper/Display/DVCInformation.cs
deleted file mode 100644
index c5a4da3f..00000000
--- a/app/NvAPIWrapper/Display/DVCInformation.cs
+++ /dev/null
@@ -1,325 +0,0 @@
-using System;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.Display;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// This class contains and provides a way to modify the Digital Vibrance Control information regarding the
- /// saturation level of the display or the output
- ///
- public class DVCInformation : IDisplayDVCInfo
- {
- private readonly DisplayHandle _displayHandle = DisplayHandle.DefaultHandle;
- private readonly OutputId _outputId = OutputId.Invalid;
- private bool? _isLegacy;
-
- ///
- /// Creates a new instance of the class using a DisplayHandle
- ///
- /// The handle of the display.
- public DVCInformation(DisplayHandle displayHandle)
- {
- _displayHandle = displayHandle;
- }
-
- ///
- /// Creates a new instance of this class using a OutputId
- ///
- /// The output identification of a display or an output
- public DVCInformation(OutputId outputId)
- {
- _outputId = outputId;
- }
-
- ///
- /// Gets and sets the normalized saturation level in the [-1,1] inclusive range.
- /// a -1 value corresponds to the minimum saturation level and maximum under-saturation and the
- /// a 1 value corresponds to the maximum saturation level and maximum over-saturation.
- /// The value of 0 indicates the default saturation level.
- ///
- public double NormalizedLevel
- {
- get
- {
- var info = GetInfo();
-
- if (info == null)
- {
- return double.NaN;
- }
-
- var deviance = info.CurrentLevel - info.DefaultLevel;
- var range = deviance >= 0
- ? info.MaximumLevel - info.DefaultLevel
- : info.DefaultLevel - info.MinimumLevel;
-
- if (deviance == 0 || range == 0)
- {
- return 0;
- }
-
- return Math.Max(Math.Min((double) deviance / range, 1), -1);
- }
- set
- {
- if (double.IsNaN(value) || double.IsInfinity(value))
- {
- throw new ArgumentOutOfRangeException(nameof(value));
- }
-
- var info = GetInfo();
-
- if (info == null)
- {
- return;
- }
-
- var range = value >= 0 ? info.MaximumLevel - info.DefaultLevel : info.DefaultLevel - info.MinimumLevel;
- var level = Math.Max(Math.Min((int) (value * range) + info.DefaultLevel, info.MaximumLevel), info.MinimumLevel);
-
- if (level == info.CurrentLevel)
- {
- return;
- }
-
- SetLevel(level);
- }
- }
-
- ///
- /// Gets and sets the current saturation level
- ///
- public int CurrentLevel
- {
- get => GetInfo()?.CurrentLevel ?? 0;
- set
- {
- var info = GetInfo();
-
- if (info == null)
- {
- return;
- }
-
- value = Math.Max(Math.Min(value, info.MaximumLevel), info.MinimumLevel);
-
- if (info.CurrentLevel == value)
- {
- return;
- }
-
- SetLevel(value);
- }
- }
-
- ///
- public int DefaultLevel
- {
- get => GetInfo()?.DefaultLevel ?? 0;
- }
-
- ///
- public int MaximumLevel
- {
- get => GetInfo()?.MaximumLevel ?? 0;
- }
-
- ///
- public int MinimumLevel
- {
- get => GetInfo()?.MinimumLevel ?? 0;
- }
-
- ///
- public override string ToString()
- {
- return
- $"{CurrentLevel:D} @ [{MinimumLevel:D} <= {DefaultLevel:D} <= {MaximumLevel:D}] = {NormalizedLevel:F2}";
- }
-
- private IDisplayDVCInfo GetInfo()
- {
- if (_isLegacy == true)
- {
- return GetLegacyInfo();
- }
-
- if (_isLegacy == false)
- {
- return GetModernInfo();
- }
-
- var info = GetModernInfo() ?? GetLegacyInfo();
-
- if (info == null)
- {
- // exception occured on both, force a mode
- _isLegacy = false;
-
- return GetInfo();
- }
-
- return info;
- }
-
- private IDisplayDVCInfo GetLegacyInfo()
- {
- try
- {
- var info = _outputId == OutputId.Invalid
- ? DisplayApi.GetDVCInfo(_displayHandle)
- : DisplayApi.GetDVCInfo(_outputId);
-
- if (info.MaximumLevel == 0 && info.MinimumLevel == 0 && info.CurrentLevel == 0)
- {
- return null;
- }
-
- if (!_isLegacy.HasValue)
- {
- _isLegacy = true;
- }
-
-
- return info;
- }
- catch (Exception)
- {
- if (_isLegacy == true)
- {
- throw;
- }
-
- // ignore
- }
-
- return null;
- }
-
- private IDisplayDVCInfo GetModernInfo()
- {
- try
- {
- var info = _outputId == OutputId.Invalid
- ? DisplayApi.GetDVCInfoEx(_displayHandle)
- : DisplayApi.GetDVCInfoEx(_outputId);
-
- if (info.MaximumLevel == 0 && info.MinimumLevel == 0 && info.CurrentLevel == 0)
- {
- return null;
- }
-
- if (!_isLegacy.HasValue)
- {
- _isLegacy = false;
- }
-
- return info;
- }
- catch (Exception)
- {
- if (_isLegacy == false)
- {
- throw;
- }
-
- // ignore
- }
-
- return null;
- }
-
- private bool SetLegacyLevel(int level)
- {
- try
- {
- if (_outputId == OutputId.Invalid)
- {
- DisplayApi.SetDVCLevel(_displayHandle, level);
- }
- else
- {
- DisplayApi.SetDVCLevel(_outputId, level);
- }
-
- if (!_isLegacy.HasValue)
- {
- _isLegacy = true;
- }
-
- return true;
- }
- catch (Exception)
- {
- if (_isLegacy == true)
- {
- throw;
- }
-
- // ignore
- }
-
- return false;
- }
-
- private void SetLevel(int level)
- {
- if (_isLegacy == true)
- {
- SetLegacyLevel(level);
- }
- else if (_isLegacy == false)
- {
- SetModernLevel(level);
- }
- else
- {
- var success = SetModernLevel(level) || SetLegacyLevel(level);
-
- if (!success)
- {
- // exception occured on both, force a mode
- _isLegacy = false;
-
- SetLevel(level);
- }
- }
- }
-
- private bool SetModernLevel(int level)
- {
- try
- {
- if (_outputId == OutputId.Invalid)
- {
- DisplayApi.SetDVCLevelEx(_displayHandle, level);
- }
- else
- {
- DisplayApi.SetDVCLevelEx(_outputId, level);
- }
-
- if (!_isLegacy.HasValue)
- {
- _isLegacy = false;
- }
-
- return true;
- }
- catch (Exception)
- {
- if (_isLegacy == false)
- {
- throw;
- }
-
- // ignore
- }
-
- return false;
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/Display.cs b/app/NvAPIWrapper/Display/Display.cs
deleted file mode 100644
index 4da92f77..00000000
--- a/app/NvAPIWrapper/Display/Display.cs
+++ /dev/null
@@ -1,232 +0,0 @@
-using System;
-using System.Linq;
-using NvAPIWrapper.GPU;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.Exceptions;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.Display;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents an attached display
- ///
- public class Display : IEquatable
- {
- ///
- /// Creates a new Display
- ///
- /// Handle of the display device
- public Display(DisplayHandle handle)
- {
- Handle = handle;
- }
-
- ///
- /// Creates a new Display
- ///
- /// Name of the display device
- public Display(string displayName)
- {
- Handle = DisplayApi.GetAssociatedNvidiaDisplayHandle(displayName);
- }
-
- ///
- /// Gets the corresponding Digital Vibrance Control information
- ///
- public DVCInformation DigitalVibranceControl
- {
- get => new DVCInformation(Handle);
- }
-
- ///
- /// Gets corresponding DisplayDevice based on display name
- ///
- public DisplayDevice DisplayDevice
- {
- get => new DisplayDevice(Name);
- }
-
- ///
- /// Gets display driver build title
- ///
- public string DriverBuildTitle
- {
- get => DisplayApi.GetDisplayDriverBuildTitle(Handle);
- }
-
- ///
- /// Gets display handle
- ///
- public DisplayHandle Handle { get; }
-
- ///
- /// Gets the display HDMI support information
- ///
- public IHDMISupportInfo HDMISupportInfo
- {
- get
- {
- var outputId = OutputId.Invalid;
- try
- {
- outputId = DisplayApi.GetAssociatedDisplayOutputId(Handle);
- }
- catch (NVIDIAApiException)
- {
- // ignore
- }
- return DisplayApi.GetHDMISupportInfo(Handle, outputId);
- }
- }
-
- ///
- /// Gets the corresponding HUE information
- ///
- public HUEInformation HUEControl
- {
- get => new HUEInformation(Handle);
- }
-
- ///
- /// Gets the driving logical GPU
- ///
- public LogicalGPU LogicalGPU
- {
- get => new LogicalGPU(GPUApi.GetLogicalGPUFromDisplay(Handle));
- }
-
- ///
- /// Gets display name
- ///
- public string Name
- {
- get => DisplayApi.GetAssociatedNvidiaDisplayName(Handle);
- }
-
- ///
- /// Gets the connected GPU output
- ///
- public GPUOutput Output
- {
- get => new GPUOutput(DisplayApi.GetAssociatedDisplayOutputId(Handle), PhysicalGPUs.FirstOrDefault());
- }
-
- ///
- /// Gets the list of all physical GPUs responsible for this display, with the first GPU returned as the one with the
- /// attached active output.
- ///
- public PhysicalGPU[] PhysicalGPUs
- {
- get => GPUApi.GetPhysicalGPUsFromDisplay(Handle).Select(handle => new PhysicalGPU(handle)).ToArray();
- }
-
- ///
- public bool Equals(Display other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Handle.Equals(other.Handle);
- }
-
- ///
- /// This function returns all NVIDIA displays
- /// Note: Display handles can get invalidated on a modeset.
- ///
- /// An array of Display objects
- public static Display[] GetDisplays()
- {
- return DisplayApi.EnumNvidiaDisplayHandle().Select(handle => new Display(handle)).ToArray();
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(Display left, Display right)
- {
- return right?.Equals(left) ?? ReferenceEquals(left, null);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(Display left, Display right)
- {
- return !(right == left);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((Display) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- return Handle.GetHashCode();
- }
-
- ///
- public override string ToString()
- {
- return Name;
- }
-
- ///
- /// Gets all the supported NVIDIA display views (nView and Dualview modes) for this display.
- ///
- ///
- public TargetViewMode[] GetSupportedViews()
- {
- return DisplayApi.GetSupportedViews(Handle);
- }
-
- ///
- /// Overrides the refresh rate on this display.
- /// The new refresh rate can be applied right away or deferred to be applied with the next OS
- /// mode-set.
- /// The override is good for only one mode-set (regardless whether it's deferred or immediate).
- ///
- /// The refresh rate to be applied.
- ///
- /// A boolean value indicating if the refresh rate override should be deferred to the next OS
- /// mode-set.
- ///
- public void OverrideRefreshRate(float refreshRate, bool isDeferred = false)
- {
- DisplayApi.SetRefreshRateOverride(Handle, refreshRate, isDeferred);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/DisplayDevice.cs b/app/NvAPIWrapper/Display/DisplayDevice.cs
deleted file mode 100644
index 5d404bf9..00000000
--- a/app/NvAPIWrapper/Display/DisplayDevice.cs
+++ /dev/null
@@ -1,893 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using NvAPIWrapper.GPU;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.Exceptions;
-using NvAPIWrapper.Native.General;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-using NvAPIWrapper.Native.Interfaces.Display;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents an NVIDIA display device
- ///
- public class DisplayDevice : IEquatable
- {
- ///
- /// Creates a new DisplayDevice
- ///
- /// Display identification of the device
- public DisplayDevice(uint displayId)
- {
- DisplayId = displayId;
- var extraInformation = PhysicalGPU.GetDisplayDevices().FirstOrDefault(ids => ids.DisplayId == DisplayId);
-
- if (extraInformation != null)
- {
- IsAvailable = true;
- ScanOutInformation = new ScanOutInformation(this);
- ConnectionType = extraInformation.ConnectionType;
- IsDynamic = extraInformation.IsDynamic;
- IsMultiStreamRootNode = extraInformation.IsMultiStreamRootNode;
- IsActive = extraInformation.IsActive;
- IsCluster = extraInformation.IsCluster;
- IsOSVisible = extraInformation.IsOSVisible;
- IsWFD = extraInformation.IsWFD;
- IsConnected = extraInformation.IsConnected;
- IsPhysicallyConnected = extraInformation.IsPhysicallyConnected;
- }
- }
-
- ///
- /// Creates a new DisplayDevice
- ///
- /// Display identification and attributes of the display device
- public DisplayDevice(IDisplayIds displayIds)
- {
- IsAvailable = true;
- DisplayId = displayIds.DisplayId;
- ScanOutInformation = new ScanOutInformation(this);
- ConnectionType = displayIds.ConnectionType;
- IsDynamic = displayIds.IsDynamic;
- IsMultiStreamRootNode = displayIds.IsMultiStreamRootNode;
- IsActive = displayIds.IsActive;
- IsCluster = displayIds.IsCluster;
- IsOSVisible = displayIds.IsOSVisible;
- IsWFD = displayIds.IsWFD;
- IsConnected = displayIds.IsConnected;
- IsPhysicallyConnected = displayIds.IsPhysicallyConnected;
- }
-
- ///
- /// Creates a new DisplayDevice
- ///
- /// Display name of the display device
- public DisplayDevice(string displayName) : this(DisplayApi.GetDisplayIdByDisplayName(displayName))
- {
- }
-
- ///
- /// Gets the display device connection type
- ///
- public MonitorConnectionType ConnectionType { get; }
-
- ///
- /// Gets the current display color data
- ///
- public ColorData CurrentColorData
- {
- get
- {
- var instances = new IColorData[]
- {
- new ColorDataV5(ColorDataCommand.Get),
- new ColorDataV4(ColorDataCommand.Get),
- new ColorDataV3(ColorDataCommand.Get),
- new ColorDataV2(ColorDataCommand.Get),
- new ColorDataV1(ColorDataCommand.Get)
- };
-
- var instance = DisplayApi.ColorControl(DisplayId, instances);
-
- return new ColorData(instance);
- }
- }
-
- ///
- /// Gets the current display device timing
- ///
- public Timing CurrentTiming
- {
- get => DisplayApi.GetTiming(DisplayId, new TimingInput(TimingOverride.Current));
- }
-
- ///
- /// Gets the default display color data
- ///
- public ColorData DefaultColorData
- {
- get
- {
- var instances = new IColorData[]
- {
- new ColorDataV5(ColorDataCommand.GetDefault),
- new ColorDataV4(ColorDataCommand.GetDefault),
- new ColorDataV3(ColorDataCommand.GetDefault),
- new ColorDataV2(ColorDataCommand.GetDefault),
- new ColorDataV1(ColorDataCommand.GetDefault)
- };
-
- var instance = DisplayApi.ColorControl(DisplayId, instances);
-
- return new ColorData(instance);
- }
- }
-
- ///
- /// Gets the NVIDIA display identification
- ///
- public uint DisplayId { get; }
-
- ///
- /// Gets the monitor Display port capabilities
- ///
- public MonitorColorData[] DisplayPortColorCapabilities
- {
- get
- {
- if (ConnectionType != MonitorConnectionType.DisplayPort)
- {
- return null;
- }
-
- return DisplayApi.GetMonitorColorCapabilities(DisplayId);
- }
- }
-
- ///
- /// Gets the display driver EDID specified HDR capabilities
- ///
- public HDRCapabilitiesV1 DriverHDRCapabilities
- {
- get => DisplayApi.GetHDRCapabilities(DisplayId, true);
- }
-
- ///
- /// Gets the display currently effective HDR capabilities
- ///
- public HDRCapabilitiesV1 EffectiveHDRCapabilities
- {
- get => DisplayApi.GetHDRCapabilities(DisplayId, false);
- }
-
- ///
- /// Gets the HDMI audio info-frame current information
- ///
- public InfoFrameAudio? HDMIAudioFrameCurrentInformation
- {
- get
- {
- try
- {
- var infoFrame = new InfoFrameData(InfoFrameCommand.Get, InfoFrameDataType.AudioInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.AudioInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
-
- ///
- /// Gets the HDMI audio info-frame default information
- ///
- public InfoFrameAudio? HDMIAudioFrameDefaultInformation
- {
- get
- {
- try
- {
- var infoFrame = new InfoFrameData(InfoFrameCommand.GetDefault, InfoFrameDataType.AudioInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.AudioInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets the HDMI audio info-frame override information
- ///
- public InfoFrameAudio? HDMIAudioFrameOverrideInformation
- {
- get
- {
- try
- {
- var infoFrame = new InfoFrameData(InfoFrameCommand.GetOverride, InfoFrameDataType.AudioInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.AudioInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets the HDMI audio info-frame property information
- ///
- public InfoFrameProperty? HDMIAudioFramePropertyInformation
- {
- get
- {
- try
- {
- var infoFrame = new InfoFrameData(InfoFrameCommand.GetProperty, InfoFrameDataType.AudioInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.PropertyInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets the device HDMI support information
- ///
- public IHDMISupportInfo HDMISupportInfo
- {
- get => DisplayApi.GetHDMISupportInfo(DisplayId);
- }
-
-
- ///
- /// Gets the HDMI auxiliary video info-frame current information
- ///
- public InfoFrameVideo? HDMIVideoFrameCurrentInformation
- {
- get
- {
- try
- {
- var infoFrame =
- new InfoFrameData(InfoFrameCommand.Get, InfoFrameDataType.AuxiliaryVideoInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.AuxiliaryVideoInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets the HDMI auxiliary video info-frame default information
- ///
- public InfoFrameVideo? HDMIVideoFrameDefaultInformation
- {
- get
- {
- try
- {
- var infoFrame = new InfoFrameData(InfoFrameCommand.GetDefault,
- InfoFrameDataType.AuxiliaryVideoInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.AuxiliaryVideoInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets the HDMI auxiliary video info-frame override information
- ///
- public InfoFrameVideo? HDMIVideoFrameOverrideInformation
- {
- get
- {
- try
- {
- var infoFrame = new InfoFrameData(InfoFrameCommand.GetOverride,
- InfoFrameDataType.AuxiliaryVideoInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.AuxiliaryVideoInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets the HDMI auxiliary video info-frame property information
- ///
- public InfoFrameProperty? HDMIVideoFramePropertyInformation
- {
- get
- {
- try
- {
- var infoFrame = new InfoFrameData(InfoFrameCommand.GetProperty,
- InfoFrameDataType.AuxiliaryVideoInformation);
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
-
- return infoFrame.PropertyInformation;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets the HDR color data, or null if the HDR is disabled or unavailable
- ///
- public HDRColorData HDRColorData
- {
- get
- {
- try
- {
- var instances = new IHDRColorData[]
- {
- new HDRColorDataV2(ColorDataHDRCommand.Get),
- new HDRColorDataV1(ColorDataHDRCommand.Get)
- };
-
- var instance = DisplayApi.HDRColorControl(DisplayId, instances);
-
- if (instance.HDRMode == ColorDataHDRMode.Off)
- {
- return null;
- }
-
- return new HDRColorData(instance);
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return null;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Indicates if the display is being actively driven
- ///
- public bool IsActive { get; }
-
- ///
- /// Indicates if the display device is currently available
- ///
- public bool IsAvailable { get; }
-
- ///
- /// Indicates if the display is the representative display
- ///
- public bool IsCluster { get; }
-
- ///
- /// Indicates if the display is connected
- ///
- public bool IsConnected { get; }
-
- ///
- /// Indicates if the display is part of MST topology and it's a dynamic
- ///
- public bool IsDynamic { get; }
-
- ///
- /// Indicates if the display identification belongs to a multi stream enabled connector (root node). Note that when
- /// multi stream is enabled and a single multi stream capable monitor is connected to it, the monitor will share the
- /// display id with the RootNode.
- /// When there is more than one monitor connected in a multi stream topology, then the root node will have a separate
- /// displayId.
- ///
- public bool IsMultiStreamRootNode { get; }
-
- ///
- /// Indicates if the display is reported to the OS
- ///
- public bool IsOSVisible { get; }
-
- ///
- /// Indicates if the display is a physically connected display; Valid only when IsConnected is true
- ///
- public bool IsPhysicallyConnected { get; }
-
- ///
- /// Indicates if the display is wireless
- ///
- public bool IsWFD { get; }
-
- ///
- /// Gets the connected GPU output
- ///
- public GPUOutput Output
- {
- get
- {
- PhysicalGPUHandle handle;
- var outputId = GPUApi.GetGPUAndOutputIdFromDisplayId(DisplayId, out handle);
-
- return new GPUOutput(outputId, new PhysicalGPU(handle));
- }
- }
-
- ///
- /// Gets the connected physical GPU
- ///
- public PhysicalGPU PhysicalGPU
- {
- get
- {
- try
- {
- var gpuHandle = GPUApi.GetPhysicalGPUFromDisplayId(DisplayId);
-
- return new PhysicalGPU(gpuHandle);
- }
- catch
- {
- // ignored
- }
-
- return Output.PhysicalGPU;
- }
- }
-
- ///
- /// Gets information regarding the scan-out settings of this display device
- ///
- public ScanOutInformation ScanOutInformation { get; }
-
- ///
- /// Gets monitor capabilities from the Video Capability Data Block if available, otherwise null
- ///
- public MonitorVCDBCapabilities? VCDBMonitorCapabilities
- {
- get => DisplayApi.GetMonitorCapabilities(DisplayId, MonitorCapabilitiesType.VCDB)?.VCDBCapabilities;
- }
-
- ///
- /// Gets monitor capabilities from the Vendor Specific Data Block if available, otherwise null
- ///
- public MonitorVSDBCapabilities? VSDBMonitorCapabilities
- {
- get => DisplayApi.GetMonitorCapabilities(DisplayId, MonitorCapabilitiesType.VSDB)?.VSDBCapabilities;
- }
-
- ///
- public bool Equals(DisplayDevice other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return DisplayId == other.DisplayId;
- }
-
- ///
- /// Deletes a custom resolution.
- ///
- /// The custom resolution to delete.
- /// A list of display ids to remove the custom resolution from.
- public static void DeleteCustomResolution(CustomResolution customResolution, uint[] displayIds)
- {
- var customDisplay = customResolution.AsCustomDisplay(false);
- DisplayApi.DeleteCustomDisplay(displayIds, customDisplay);
- }
-
- ///
- /// Returns an instance of representing the primary GDI display device.
- ///
- /// An instance of .
- public static DisplayDevice GetGDIPrimaryDisplayDevice()
- {
- var displayId = DisplayApi.GetGDIPrimaryDisplayId();
-
- if (displayId == 0)
- {
- return null;
- }
-
- return new DisplayDevice(displayId);
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(DisplayDevice left, DisplayDevice right)
- {
- return right?.Equals(left) ?? ReferenceEquals(left, null);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(DisplayDevice left, DisplayDevice right)
- {
- return !(right == left);
- }
-
- ///
- /// Reverts the custom resolution currently on trial.
- ///
- /// A list of display ids to revert the custom resolution from.
- public static void RevertCustomResolution(uint[] displayIds)
- {
- DisplayApi.RevertCustomDisplayTrial(displayIds);
- }
-
- ///
- /// Saves the custom resolution currently on trial.
- ///
- /// A list of display ids to save the custom resolution for.
- ///
- /// If set, the saved custom display will only be applied on the monitor with the same
- /// outputId.
- ///
- ///
- /// If set, the saved custom display will only be applied on the monitor with the same EDID
- /// ID or the same TV connector in case of analog TV.
- ///
- public static void SaveCustomResolution(uint[] displayIds, bool isThisOutputIdOnly, bool isThisMonitorOnly)
- {
- DisplayApi.SaveCustomDisplay(displayIds, isThisOutputIdOnly, isThisMonitorOnly);
- }
-
- ///
- /// Applies a custom resolution into trial
- ///
- /// The custom resolution to apply.
- /// A list of display ids to apply the custom resolution on.
- ///
- /// A boolean value indicating that a hardware mode-set without OS update should be
- /// performed.
- ///
- public static void TrialCustomResolution(
- CustomResolution customResolution,
- uint[] displayIds,
- bool hardwareModeSetOnly = true)
- {
- var customDisplay = customResolution.AsCustomDisplay(hardwareModeSetOnly);
- DisplayApi.TryCustomDisplay(displayIds.ToDictionary(u => u, u => customDisplay));
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((DisplayDevice) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- return (int) DisplayId;
- }
-
-
- ///
- public override string ToString()
- {
- return $"Display #{DisplayId}";
- }
-
- ///
- /// Calculates a valid timing based on the argument passed
- ///
- /// The preferred width.
- /// The preferred height.
- /// The preferred refresh rate.
- /// The boolean value indicating if the preferred resolution is an interlaced resolution.
- /// Returns a valid instance of .
- public Timing CalculateTiming(uint width, uint height, float refreshRate, bool isInterlaced)
- {
- return DisplayApi.GetTiming(
- DisplayId,
- new TimingInput(width, height, refreshRate, TimingOverride.Auto, isInterlaced)
- );
- }
-
- ///
- /// Deletes a custom resolution.
- ///
- /// The custom resolution to delete.
- public void DeleteCustomResolution(CustomResolution customResolution)
- {
- DeleteCustomResolution(customResolution, new[] {DisplayId});
- }
-
- ///
- /// Retrieves the list of custom resolutions saved for this display device
- ///
- /// A list of instances.
- public IEnumerable GetCustomResolutions()
- {
- return DisplayApi.EnumCustomDisplays(DisplayId).Select(custom => new CustomResolution(custom));
- }
-
- ///
- /// Checks if a color data is supported on this display
- ///
- /// The color data to be checked.
- /// true if the color data passed is supported; otherwise false
- public bool IsColorDataSupported(ColorData colorData)
- {
- var instances = new IColorData[]
- {
- colorData.AsColorDataV5(ColorDataCommand.IsSupportedColor),
- colorData.AsColorDataV4(ColorDataCommand.IsSupportedColor),
- colorData.AsColorDataV3(ColorDataCommand.IsSupportedColor),
- colorData.AsColorDataV2(ColorDataCommand.IsSupportedColor),
- colorData.AsColorDataV1(ColorDataCommand.IsSupportedColor)
- };
-
- try
- {
- DisplayApi.ColorControl(DisplayId, instances);
-
- return true;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status == Status.NotSupported)
- {
- return false;
- }
-
- throw;
- }
- }
-
- ///
- /// Resets the HDMI audio info-frame information to default
- ///
- public void ResetHDMIAudioFrameInformation()
- {
- var infoFrame = new InfoFrameData(
- InfoFrameCommand.Reset,
- InfoFrameDataType.AudioInformation
- );
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
- }
-
- ///
- /// Resets the HDMI auxiliary video info-frame information to default
- ///
- public void ResetHDMIVideoFrameInformation()
- {
- var infoFrame = new InfoFrameData(
- InfoFrameCommand.Reset,
- InfoFrameDataType.AuxiliaryVideoInformation
- );
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
- }
-
- ///
- /// Reverts the custom resolution currently on trial.
- ///
- public void RevertCustomResolution()
- {
- RevertCustomResolution(new[] {DisplayId});
- }
-
- ///
- /// Saves the custom resolution currently on trial.
- ///
- ///
- /// If set, the saved custom display will only be applied on the monitor with the same
- /// outputId.
- ///
- ///
- /// If set, the saved custom display will only be applied on the monitor with the same EDID
- /// ID or the same TV connector in case of analog TV.
- ///
- public void SaveCustomResolution(bool isThisOutputIdOnly = true, bool isThisMonitorOnly = true)
- {
- SaveCustomResolution(new[] {DisplayId}, isThisOutputIdOnly, isThisMonitorOnly);
- }
-
- ///
- /// Changes the display current color data configuration
- ///
- /// The color data to be set.
- public void SetColorData(ColorData colorData)
- {
- var instances = new IColorData[]
- {
- colorData.AsColorDataV5(ColorDataCommand.Set),
- colorData.AsColorDataV4(ColorDataCommand.Set),
- colorData.AsColorDataV3(ColorDataCommand.Set),
- colorData.AsColorDataV2(ColorDataCommand.Set),
- colorData.AsColorDataV1(ColorDataCommand.Set)
- };
-
- DisplayApi.ColorControl(DisplayId, instances);
- }
-
- ///
- /// Sets the HDMI video info-frame current or override information
- ///
- /// The new information.
- /// A boolean value indicating if the changes should persist mode-set and OS restart.
- public void SetHDMIAudioFrameInformation(InfoFrameAudio audio, bool isOverride = false)
- {
- var infoFrame = new InfoFrameData(
- isOverride ? InfoFrameCommand.SetOverride : InfoFrameCommand.Set,
- audio
- );
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
- }
-
- ///
- /// Sets the HDMI audio info-frame property information
- ///
- /// The new property information.
- public void SetHDMIAudioFramePropertyInformation(InfoFrameProperty property)
- {
- var infoFrame = new InfoFrameData(
- InfoFrameCommand.SetProperty,
- InfoFrameDataType.AudioInformation,
- property
- );
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
- }
-
- ///
- /// Sets the HDMI auxiliary video info-frame current or override information
- ///
- /// The new information.
- /// A boolean value indicating if the changes should persist mode-set and OS restart.
- public void SetHDMIVideoFrameInformation(InfoFrameVideo video, bool isOverride = false)
- {
- var infoFrame = new InfoFrameData(
- isOverride ? InfoFrameCommand.SetOverride : InfoFrameCommand.Set,
- video
- );
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
- }
-
- ///
- /// Sets the HDMI auxiliary video info-frame property information
- ///
- /// The new property information.
- public void SetHDMIVideoFramePropertyInformation(InfoFrameProperty property)
- {
- var infoFrame = new InfoFrameData(
- InfoFrameCommand.SetProperty,
- InfoFrameDataType.AuxiliaryVideoInformation,
- property
- );
- DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
- }
-
- ///
- /// Changes the display HDR color data configuration
- ///
- /// The color data to be set.
- public void SetHDRColorData(HDRColorData colorData)
- {
- var instances = new IHDRColorData[]
- {
- colorData.AsHDRColorDataV2(ColorDataHDRCommand.Set),
- colorData.AsHDRColorDataV1(ColorDataHDRCommand.Set)
- };
-
- DisplayApi.HDRColorControl(DisplayId, instances);
- }
-
- ///
- /// Applies a custom resolution into trial.
- ///
- /// The custom resolution to apply.
- ///
- /// A boolean value indicating that a hardware mode-set without OS update should be
- /// performed.
- ///
- public void TrialCustomResolution(CustomResolution customResolution, bool hardwareModeSetOnly = true)
- {
- TrialCustomResolution(customResolution, new[] {DisplayId}, hardwareModeSetOnly);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/FloatTexture.cs b/app/NvAPIWrapper/Display/FloatTexture.cs
deleted file mode 100644
index 74ee5524..00000000
--- a/app/NvAPIWrapper/Display/FloatTexture.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-using System;
-using System.Linq;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents a texture of float values
- ///
- public class FloatTexture : IEquatable
- {
- ///
- /// Underlying float array containing the values of all channels in all pixels
- ///
- protected readonly float[] UnderlyingArray;
-
- ///
- /// Creates a new instance of .
- ///
- /// The texture width.
- /// The texture height.
- /// The number of texture channels.
- public FloatTexture(int width, int height, int channels) : this(width, height, channels, null)
- {
- }
-
- ///
- /// Creates a new instance of .
- ///
- /// The texture width.
- /// The texture height.
- /// The number of texture channels.
- /// The underlying array containing all float values.
- // ReSharper disable once TooManyDependencies
- protected FloatTexture(int width, int height, int channels, float[] array)
- {
- Width = width;
- Height = height;
- Channels = channels;
- UnderlyingArray = array ?? new float[width * height * channels];
- }
-
- ///
- /// Gets the number of texture channels
- ///
- public int Channels { get; }
-
- ///
- /// Gets the texture height in pixel
- ///
- public int Height { get; }
-
- ///
- /// Gets the texture width in pixels
- ///
- public int Width { get; }
-
- ///
- public bool Equals(FloatTexture other)
- {
- if (other == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- if (other.UnderlyingArray.Length != UnderlyingArray.Length)
- {
- return false;
- }
-
- if (other.Width != Width || other.Height != Height || other.Channels != Channels)
- {
- return false;
- }
-
- return !UnderlyingArray.Where((t, i) => Math.Abs(other.UnderlyingArray[i] - t) > 0.0001).Any();
- }
-
- ///
- /// Returns a new instance of FloatTexture from the passed array of float values.
- ///
- /// The texture width.
- /// The texture height.
- /// The texture channels.
- /// The array of float values.
- /// A new instance of .
- // ReSharper disable once TooManyArguments
- public static FloatTexture FromFloatArray(int width, int height, int channels, float[] floats)
- {
- if (floats.Length != width * height * channels)
- {
- throw new ArgumentOutOfRangeException(nameof(floats));
- }
-
- return new FloatTexture(width, height, channels, floats.ToArray());
- }
-
- ///
- /// Compares two instance of for equality.
- ///
- /// The first instance.
- /// The second instance.
- /// if both instances are equal, otherwise
- public static bool operator ==(FloatTexture left, FloatTexture right)
- {
- return Equals(left, right) || left?.Equals(right) == true;
- }
-
- ///
- /// Compares two instance of for in-equality.
- ///
- /// The first instance.
- /// The second instance.
- /// if both instances are not equal, otherwise
- public static bool operator !=(FloatTexture left, FloatTexture right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (obj == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- return Equals(obj as FloatTexture);
- }
-
- ///
- public override int GetHashCode()
- {
- return UnderlyingArray.GetHashCode();
- }
-
- ///
- /// Gets the values of each channel at a specific location
- ///
- /// The horizontal location.
- /// The vertical location.
- /// An array of float values each representing a channel value.
- public float[] GetValues(int x, int y)
- {
- return UnderlyingArray.Skip(y * Width + x).Take(Channels).ToArray();
- }
-
- ///
- /// Sets the value of each channel at a specific location
- ///
- /// The horizontal location.
- /// The vertical location.
- /// An array of float values each representing a channel value.
- public void SetValues(int x, int y, params float[] floats)
- {
- var index = y * Width + x;
-
- for (var i = 0; i < Math.Min(Channels, floats.Length); i++)
- {
- UnderlyingArray[index + i] = floats[i];
- }
- }
-
- ///
- /// Returns this instance of as an array of float values.
- ///
- /// An array of float values representing this instance of .
- public float[] ToFloatArray()
- {
- // Returns a copy of the underlying array
- return UnderlyingArray.ToArray();
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/HDRColorData.cs b/app/NvAPIWrapper/Display/HDRColorData.cs
deleted file mode 100644
index 935c2601..00000000
--- a/app/NvAPIWrapper/Display/HDRColorData.cs
+++ /dev/null
@@ -1,157 +0,0 @@
-using System;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.Interfaces.Display;
-
-namespace NvAPIWrapper.Display
-{
- ///
- public class HDRColorData : IHDRColorData, IEquatable
- {
- ///
- /// Creates an instance of .
- ///
- /// The hdr mode.
- /// The display color space configurations.
- /// The color data color format.
- /// The color data dynamic range.
- /// The color data color depth.
- public HDRColorData(
- ColorDataHDRMode hdrMode,
- MasteringDisplayColorData masteringDisplayData,
- ColorDataFormat? colorFormat = null,
- ColorDataDynamicRange? dynamicRange = null,
- ColorDataDepth? colorDepth = null
- )
- {
- HDRMode = hdrMode;
- MasteringDisplayData = masteringDisplayData;
- ColorFormat = colorFormat;
- DynamicRange = dynamicRange;
- ColorDepth = colorDepth;
- }
-
- internal HDRColorData(IHDRColorData colorData)
- {
- HDRMode = colorData.HDRMode;
- MasteringDisplayData = colorData.MasteringDisplayData;
- ColorDepth = colorData.ColorDepth;
- ColorFormat = colorData.ColorFormat;
- DynamicRange = colorData.DynamicRange;
- }
-
- ///
- public bool Equals(HDRColorData other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return ColorDepth == other.ColorDepth &&
- ColorFormat == other.ColorFormat &&
- DynamicRange == other.DynamicRange &&
- HDRMode == other.HDRMode &&
- MasteringDisplayData.Equals(other.MasteringDisplayData);
- }
-
- ///
- public ColorDataDepth? ColorDepth { get; }
-
- ///
- public ColorDataFormat? ColorFormat { get; }
-
- ///
- public ColorDataDynamicRange? DynamicRange { get; }
-
- ///
- public ColorDataHDRMode HDRMode { get; }
-
- ///
- public MasteringDisplayColorData MasteringDisplayData { get; }
-
- ///
- /// Compares two instances of for equality.
- ///
- /// The first instance.
- /// The second instance.
- /// true if two instances are equal; otherwise false.
- public static bool operator ==(HDRColorData left, HDRColorData right)
- {
- return left?.Equals(right) == true;
- }
-
- ///
- /// Compares two instances of for inequality.
- ///
- /// The first instance.
- /// The second instance.
- /// true if two instances are not equal; otherwise false.
- public static bool operator !=(HDRColorData left, HDRColorData right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((HDRColorData) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = ColorDepth.GetHashCode();
- hashCode = (hashCode * 397) ^ ColorFormat.GetHashCode();
- hashCode = (hashCode * 397) ^ DynamicRange.GetHashCode();
- hashCode = (hashCode * 397) ^ (int) HDRMode;
- hashCode = (hashCode * 397) ^ MasteringDisplayData.GetHashCode();
-
- return hashCode;
- }
- }
-
- internal HDRColorDataV1 AsHDRColorDataV1(ColorDataHDRCommand command)
- {
- return new HDRColorDataV1(
- command,
- HDRMode,
- MasteringDisplayData
- );
- }
-
- internal HDRColorDataV2 AsHDRColorDataV2(ColorDataHDRCommand command)
- {
- return new HDRColorDataV2(
- command,
- HDRMode,
- MasteringDisplayData,
- ColorFormat ?? ColorDataFormat.Auto,
- DynamicRange ?? ColorDataDynamicRange.Auto,
- ColorDepth ?? ColorDataDepth.Default
- );
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/HUEInformation.cs b/app/NvAPIWrapper/Display/HUEInformation.cs
deleted file mode 100644
index 22ef2d7b..00000000
--- a/app/NvAPIWrapper/Display/HUEInformation.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.GPU;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// This class contains and provides a way to modify the HUE angle
- ///
- public class HUEInformation
- {
- private readonly DisplayHandle _displayHandle = DisplayHandle.DefaultHandle;
- private readonly OutputId _outputId = OutputId.Invalid;
-
- ///
- /// Creates a new instance of the class using a DisplayHandle
- ///
- /// The handle of the display.
- public HUEInformation(DisplayHandle displayHandle)
- {
- _displayHandle = displayHandle;
- }
-
- ///
- /// Creates a new instance of this class using a OutputId
- ///
- /// The output identification of a display or an output
- public HUEInformation(OutputId outputId)
- {
- _outputId = outputId;
- }
-
- ///
- /// Gets or sets the current HUE offset angle [0-359]
- ///
- public int CurrentAngle
- {
- get
- {
- PrivateDisplayHUEInfo? hueInfo = null;
-
- if (_displayHandle != DisplayHandle.DefaultHandle)
- {
- hueInfo = DisplayApi.GetHUEInfo(_displayHandle);
- }
- else if (_outputId != OutputId.Invalid)
- {
- hueInfo = DisplayApi.GetHUEInfo(_outputId);
- }
-
- return hueInfo?.CurrentAngle ?? 0;
- }
- set
- {
- value %= 360;
-
- if (_displayHandle != DisplayHandle.DefaultHandle)
- {
- DisplayApi.SetHUEAngle(_displayHandle, value);
- }
- else if (_outputId != OutputId.Invalid)
- {
- DisplayApi.SetHUEAngle(_outputId, value);
- }
- }
- }
-
- ///
- /// Gets the default HUE offset angle [0-359]
- ///
- public int DefaultAngle
- {
- get
- {
- PrivateDisplayHUEInfo? hueInfo = null;
-
- if (_displayHandle != DisplayHandle.DefaultHandle)
- {
- hueInfo = DisplayApi.GetHUEInfo(_displayHandle);
- }
- else if (_outputId != OutputId.Invalid)
- {
- hueInfo = DisplayApi.GetHUEInfo(_outputId);
- }
-
- return hueInfo?.DefaultAngle ?? 0;
- }
- }
-
-
- ///
- public override string ToString()
- {
- return $"{CurrentAngle:D}º [{DefaultAngle:D}º]";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/IntensityTexture.cs b/app/NvAPIWrapper/Display/IntensityTexture.cs
deleted file mode 100644
index 0025f3c6..00000000
--- a/app/NvAPIWrapper/Display/IntensityTexture.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using System.Linq;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents a texture of intensity values
- ///
- public class IntensityTexture : FloatTexture
- {
- ///
- /// Creates a new instance of .
- ///
- /// The texture width.
- /// The texture height.
- public IntensityTexture(int width, int height) : base(width, height, 3)
- {
- }
-
- private IntensityTexture(int width, int height, float[] floats) : base(width, height, 3, floats)
- {
- }
-
- ///
- /// Returns a new instance of FloatTexture from the passed array of float values.
- ///
- /// The texture width.
- /// The texture height.
- /// The array of float values.
- /// A new instance of .
- // ReSharper disable once TooManyArguments
- public static IntensityTexture FromFloatArray(int width, int height, float[] floats)
- {
- if (floats.Length != width * height * 3)
- {
- throw new ArgumentOutOfRangeException(nameof(floats));
- }
-
- return new IntensityTexture(width, height, floats.ToArray());
- }
-
- ///
- /// Gets the value of intensity pixel at a specific location.
- ///
- /// The horizontal location.
- /// The vertical location.
- /// An instance of .
- public IntensityTexturePixel GetPixel(int x, int y)
- {
- return IntensityTexturePixel.FromFloatArray(UnderlyingArray, y * Width + x);
- }
-
- ///
- /// Sets the value of intensity pixel at a specific location
- ///
- /// The horizontal location.
- /// The vertical location.
- /// An instance of .
- public void SetPixel(int x, int y, IntensityTexturePixel pixel)
- {
- var index = y * Width + x;
- var floats = pixel.ToFloatArray();
-
- for (var i = 0; i < Math.Min(Channels, floats.Length); i++)
- {
- UnderlyingArray[index + i] = floats[i];
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/IntensityTexturePixel.cs b/app/NvAPIWrapper/Display/IntensityTexturePixel.cs
deleted file mode 100644
index b357773b..00000000
--- a/app/NvAPIWrapper/Display/IntensityTexturePixel.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents a RGB intensity texture pixel
- ///
- public class IntensityTexturePixel : IEquatable
- {
- ///
- /// Creates a new instance of .
- ///
- /// The intensity of the red light (0-1)
- /// The intensity of the green light (0-1)
- /// The intensity of the blue light (0-1)
- public IntensityTexturePixel(float redIntensity, float greenIntensity, float blueIntensity)
- {
- RedIntensity = Math.Max(Math.Min(redIntensity, 1), 0);
- GreenIntensity = Math.Max(Math.Min(greenIntensity, 1), 0);
- BlueIntensity = Math.Max(Math.Min(blueIntensity, 1), 0);
- }
-
- ///
- /// Gets the intensity of the blue light (0-1)
- ///
- public float BlueIntensity { get; }
-
- ///
- /// Gets the intensity of the green light (0-1)
- ///
- public float GreenIntensity { get; }
-
- ///
- /// Gets the intensity of the red light (0-1)
- ///
- public float RedIntensity { get; }
-
- ///
- public bool Equals(IntensityTexturePixel other)
- {
- if (other == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Math.Abs(RedIntensity - other.RedIntensity) < 0.0001 &&
- Math.Abs(GreenIntensity - other.GreenIntensity) < 0.0001 &&
- Math.Abs(BlueIntensity - other.BlueIntensity) < 0.0001;
- }
-
- ///
- /// Compares two instance of for equality.
- ///
- /// The first instance.
- /// The second instance.
- /// if both instances are equal, otherwise
- public static bool operator ==(IntensityTexturePixel left, IntensityTexturePixel right)
- {
- return Equals(left, right) || left?.Equals(right) == true;
- }
-
- ///
- /// Compares two instance of for in-equality.
- ///
- /// The first instance.
- /// The second instance.
- /// if both instances are not equal, otherwise
- public static bool operator !=(IntensityTexturePixel left, IntensityTexturePixel right)
- {
- return !(left == right);
- }
-
- internal static IntensityTexturePixel FromFloatArray(float[] floats, int index)
- {
- return new IntensityTexturePixel(floats[index], floats[index + 1], floats[index + 2]);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (obj == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- return Equals(obj as IntensityTexturePixel);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = RedIntensity.GetHashCode();
- hashCode = (hashCode * 397) ^ GreenIntensity.GetHashCode();
- hashCode = (hashCode * 397) ^ BlueIntensity.GetHashCode();
-
- return hashCode;
- }
- }
-
- internal float[] ToFloatArray()
- {
- return new[] {RedIntensity, GreenIntensity, BlueIntensity};
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/PathInfo.cs b/app/NvAPIWrapper/Display/PathInfo.cs
deleted file mode 100644
index 02551a1e..00000000
--- a/app/NvAPIWrapper/Display/PathInfo.cs
+++ /dev/null
@@ -1,288 +0,0 @@
-using System;
-using System.Linq;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.Exceptions;
-using NvAPIWrapper.Native.General;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces.Display;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents a configuration path
- ///
- public class PathInfo : IEquatable
- {
- ///
- /// Creates a new PathInfo
- ///
- /// Display resolution
- /// Display color format
- /// Target configuration informations
- public PathInfo(Resolution resolution, ColorFormat colorFormat, PathTargetInfo[] targetInfos)
- {
- Resolution = resolution;
- ColorFormat = colorFormat;
- TargetsInfo = targetInfos;
- }
-
- ///
- /// Creates a new PathInfo
- ///
- /// IPathInfo implamented object
- public PathInfo(IPathInfo info)
- {
- SourceId = info.SourceId;
- Resolution = info.SourceModeInfo.Resolution;
- ColorFormat = info.SourceModeInfo.ColorFormat;
- Position = info.SourceModeInfo.Position;
- SpanningOrientation = info.SourceModeInfo.SpanningOrientation;
- IsGDIPrimary = info.SourceModeInfo.IsGDIPrimary;
- IsSLIFocus = info.SourceModeInfo.IsSLIFocus;
- TargetsInfo =
- info.TargetsInfo.Select(targetInfo => new PathTargetInfo(targetInfo)).ToArray();
-
- if (info is PathInfoV2)
- {
- OSAdapterLUID = ((PathInfoV2) info).OSAdapterLUID;
- }
- }
-
- ///
- /// Gets or sets the display color format
- ///
- public ColorFormat ColorFormat { get; set; }
-
- ///
- /// Gets or sets a boolean value indicating if the this is the primary GDI display
- ///
- public bool IsGDIPrimary { get; set; }
-
- ///
- /// Gets or sets a boolean value indicating if the this is the SLI focus display
- ///
- public bool IsSLIFocus { get; set; }
-
- ///
- /// Gets OS Adapter of LUID for Non-NVIDIA adapters
- ///
- public LUID? OSAdapterLUID { get; }
-
- ///
- /// Gets or sets the display position
- ///
- public Position Position { get; set; }
-
- ///
- /// Gets or sets the display resolution
- ///
- public Resolution Resolution { get; set; }
-
- ///
- /// Gets or sets the Windows CCD display source identification. This can be optionally set.
- ///
- public uint SourceId { get; set; }
-
- ///
- /// Gets or sets the display spanning orientation, valid for XP only
- ///
- public SpanningOrientation SpanningOrientation { get; set; }
-
-
- ///
- /// Gets information about path targets
- ///
- public PathTargetInfo[] TargetsInfo { get; }
-
-
- ///
- /// Checks for equality with a PathInfo instance
- ///
- /// The PathInfo object to check with
- /// true if both objects are equal, otherwise false
- public bool Equals(PathInfo other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Resolution.Equals(other.Resolution) &&
- ColorFormat == other.ColorFormat &&
- Position.Equals(other.Position) &&
- SpanningOrientation == other.SpanningOrientation &&
- IsGDIPrimary == other.IsGDIPrimary &&
- IsSLIFocus == other.IsSLIFocus &&
- TargetsInfo.SequenceEqual(other.TargetsInfo);
- }
-
-
- ///
- /// Creates and fills a PathInfo object
- ///
- /// The newly created PathInfo object
- public static PathInfo[] GetDisplaysConfig()
- {
- var configs = DisplayApi.GetDisplayConfig();
- var logicalDisplays = configs.Select(info => new PathInfo(info)).ToArray();
- configs.DisposeAll();
-
- return logicalDisplays;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(PathInfo left, PathInfo right)
- {
- return right?.Equals(left) ?? ReferenceEquals(left, null);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(PathInfo left, PathInfo right)
- {
- return !(left == right);
- }
-
- ///
- /// Applies one or more path information configurations
- ///
- /// An array of path information configuration
- /// DisplayConfigFlags flags
- public static void SetDisplaysConfig(PathInfo[] pathInfos, DisplayConfigFlags flags)
- {
- try
- {
- var configsV2 = pathInfos.Select(config => config.GetPathInfoV2()).Cast().ToArray();
- DisplayApi.SetDisplayConfig(configsV2, flags);
- configsV2.DisposeAll();
- }
- catch (NVIDIAApiException ex)
- {
- if (ex.Status != Status.IncompatibleStructureVersion)
- {
- throw;
- }
- }
- catch (NVIDIANotSupportedException)
- {
- // ignore
- }
-
- var configsV1 = pathInfos.Select(config => config.GetPathInfoV1()).Cast().ToArray();
- DisplayApi.SetDisplayConfig(configsV1, flags);
- configsV1.DisposeAll();
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((PathInfo) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = Resolution.GetHashCode();
- hashCode = (hashCode * 397) ^ (int) ColorFormat;
- hashCode = (hashCode * 397) ^ Position.GetHashCode();
- hashCode = (hashCode * 397) ^ (int) SpanningOrientation;
- hashCode = (hashCode * 397) ^ IsGDIPrimary.GetHashCode();
- hashCode = (hashCode * 397) ^ IsSLIFocus.GetHashCode();
- hashCode = (hashCode * 397) ^ (TargetsInfo?.GetHashCode() ?? 0);
-
- return hashCode;
- }
- }
-
-
- ///
- public override string ToString()
- {
- return $"{Resolution} @ {Position} [{TargetsInfo.Length}]";
- }
-
- ///
- /// Creates and fills a GetPathInfoV1 object
- ///
- /// The newly created GetPathInfoV1 object
- public PathInfoV1 GetPathInfoV1()
- {
- var sourceModeInfo = GetSourceModeInfo();
- var pathTargetInfoV1 = GetPathTargetInfoV1Array();
-
- return new PathInfoV1(pathTargetInfoV1, sourceModeInfo, SourceId);
- }
-
- ///
- /// Creates and fills a GetPathInfoV2 object
- ///
- /// The newly created GetPathInfoV2 object
- public PathInfoV2 GetPathInfoV2()
- {
- var sourceModeInfo = GetSourceModeInfo();
- var pathTargetInfoV2 = GetPathTargetInfoV2Array();
-
- return new PathInfoV2(pathTargetInfoV2, sourceModeInfo, SourceId);
- }
-
- ///
- /// Creates and fills an array of GetPathTargetInfoV1 object
- ///
- /// The newly created array of GetPathTargetInfoV1 objects
- public PathTargetInfoV1[] GetPathTargetInfoV1Array()
- {
- return TargetsInfo.Select(config => config.GetPathTargetInfoV1()).ToArray();
- }
-
- ///
- /// Creates and fills an array of GetPathTargetInfoV2 object
- ///
- /// The newly created array of GetPathTargetInfoV2 objects
- public PathTargetInfoV2[] GetPathTargetInfoV2Array()
- {
- return TargetsInfo.Select(config => config.GetPathTargetInfoV2()).ToArray();
- }
-
- ///
- /// Creates and fills a SourceModeInfo object
- ///
- /// The newly created SourceModeInfo object
- public SourceModeInfo GetSourceModeInfo()
- {
- return new SourceModeInfo(Resolution, ColorFormat, Position, SpanningOrientation, IsGDIPrimary, IsSLIFocus);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/PathTargetInfo.cs b/app/NvAPIWrapper/Display/PathTargetInfo.cs
deleted file mode 100644
index dde14d1d..00000000
--- a/app/NvAPIWrapper/Display/PathTargetInfo.cs
+++ /dev/null
@@ -1,304 +0,0 @@
-using System;
-using System.Collections.Generic;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.Exceptions;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.Display;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents a display configuration on a path
- ///
- public class PathTargetInfo : IEquatable
- {
- private TimingOverride _timingOverride;
-
- ///
- /// Creates a new PathTargetInfo
- ///
- /// IPathTargetInfo implamented object
- public PathTargetInfo(IPathTargetInfo info)
- {
- DisplayDevice = new DisplayDevice(info.DisplayId);
-
- if (info.Details.HasValue)
- {
- Rotation = info.Details.Value.Rotation;
- Scaling = info.Details.Value.Scaling;
- TVConnectorType = info.Details.Value.ConnectorType;
- TVFormat = info.Details.Value.TVFormat;
- RefreshRateInMillihertz = info.Details.Value.RefreshRateInMillihertz;
- TimingOverride = info.Details.Value.TimingOverride;
- IsInterlaced = info.Details.Value.IsInterlaced;
- IsClonePrimary = info.Details.Value.IsClonePrimary;
- IsClonePanAndScanTarget = info.Details.Value.IsClonePanAndScanTarget;
- DisableVirtualModeSupport = info.Details.Value.DisableVirtualModeSupport;
- IsPreferredUnscaledTarget = info.Details.Value.IsPreferredUnscaledTarget;
- }
-
- if (info is PathTargetInfoV2)
- {
- WindowsCCDTargetId = ((PathTargetInfoV2) info).WindowsCCDTargetId;
- }
- }
-
- ///
- /// Creates a new PathTargetInfo
- ///
- /// DisplayDevice object
- public PathTargetInfo(DisplayDevice device)
- {
- DisplayDevice = device;
- }
-
- ///
- /// Gets or sets the virtual mode support
- ///
- public bool DisableVirtualModeSupport { get; set; }
-
- ///
- /// Gets corresponding DisplayDevice
- ///
- public DisplayDevice DisplayDevice { get; }
-
- ///
- /// Gets or sets the pan and scan is availability. Valid only when the target is part of clone
- /// topology.
- ///
- public bool IsClonePanAndScanTarget { get; set; }
-
- ///
- /// Gets or sets the primary display in clone configuration. This is *NOT* GDI Primary.
- /// Only one target can be primary per source. If no primary is specified, the first target will automatically be
- /// primary.
- ///
- public bool IsClonePrimary { get; set; }
-
- ///
- /// Gets or sets the interlaced mode flag, ignored if refreshRate == 0
- ///
- public bool IsInterlaced { get; set; }
-
- ///
- /// Gets or sets the preferred unscaled mode of target
- ///
- public bool IsPreferredUnscaledTarget { get; set; }
-
- ///
- /// Gets and sets the non-interlaced Refresh Rate of the mode, multiplied by 1000, 0 = ignored
- /// This is the value which driver reports to the OS.
- ///
- public uint RefreshRateInMillihertz { get; set; }
-
- ///
- /// Gets and sets the rotation setting
- ///
- public Rotate Rotation { get; set; }
-
- ///
- /// Gets and sets the scaling setting
- ///
- public Scaling Scaling { get; set; }
-
- ///
- /// Gets and sets the custom timing of display
- /// Ignored if TimingOverride == TimingOverride.Current
- ///
- public TimingOverride TimingOverride
- {
- get => _timingOverride;
- set
- {
- if (value == TimingOverride.Custom)
- {
- throw new NVIDIANotSupportedException("Custom timing is not supported yet.");
- }
-
- _timingOverride = value;
- }
- }
-
- ///
- /// Gets and sets the connector type. For TV only, ignored if TVFormat == TVFormat.None.
- ///
- public ConnectorType TVConnectorType { get; set; }
-
- ///
- /// Gets and sets the TV format. For TV only, otherwise set to TVFormat.None
- ///
- public TVFormat TVFormat { get; set; }
-
- ///
- /// Gets the Windows CCD target ID. Must be present only for non-NVIDIA adapter, for NVIDIA adapter this parameter is
- /// ignored.
- ///
- public uint WindowsCCDTargetId { get; }
-
- ///
- /// Checks for equality with a PathTargetInfo instance
- ///
- /// The PathTargetInfo object to check with
- /// true if both objects are equal, otherwise false
- public bool Equals(PathTargetInfo other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return _timingOverride == other._timingOverride &&
- Rotation == other.Rotation &&
- Scaling == other.Scaling &&
- RefreshRateInMillihertz == other.RefreshRateInMillihertz &&
- (TVFormat == TVFormat.None || TVConnectorType == other.TVConnectorType) &&
- TVFormat == other.TVFormat &&
- DisplayDevice.Equals(other.DisplayDevice) &&
- IsInterlaced == other.IsInterlaced &&
- IsClonePrimary == other.IsClonePrimary &&
- IsClonePanAndScanTarget == other.IsClonePanAndScanTarget &&
- DisableVirtualModeSupport == other.DisableVirtualModeSupport &&
- IsPreferredUnscaledTarget == other.IsPreferredUnscaledTarget;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(PathTargetInfo left, PathTargetInfo right)
- {
- return right?.Equals(left) ?? ReferenceEquals(left, null);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(PathTargetInfo left, PathTargetInfo right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((PathTargetInfo) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = (int) _timingOverride;
- hashCode = (hashCode * 397) ^ (int) Rotation;
- hashCode = (hashCode * 397) ^ (int) Scaling;
- hashCode = (hashCode * 397) ^ (int) RefreshRateInMillihertz;
- hashCode = (hashCode * 397) ^ (int) TVFormat;
- hashCode = (hashCode * 397) ^ (TVFormat != TVFormat.None ? (int) TVConnectorType : 0);
- hashCode = (hashCode * 397) ^ (DisplayDevice?.GetHashCode() ?? 0);
- hashCode = (hashCode * 397) ^ IsInterlaced.GetHashCode();
- hashCode = (hashCode * 397) ^ IsClonePrimary.GetHashCode();
- hashCode = (hashCode * 397) ^ IsClonePanAndScanTarget.GetHashCode();
- hashCode = (hashCode * 397) ^ DisableVirtualModeSupport.GetHashCode();
- hashCode = (hashCode * 397) ^ IsPreferredUnscaledTarget.GetHashCode();
-
- return hashCode;
- }
- }
-
- ///
- public override string ToString()
- {
- var strs = new List
- {
- DisplayDevice.ToString()
- };
-
- if (RefreshRateInMillihertz > 0)
- {
- strs.Add($"@ {RefreshRateInMillihertz / 1000}hz");
- }
-
- if (TVFormat != TVFormat.None)
- {
- strs.Add($"- TV {TVFormat}");
- }
-
- strs.Add(IsInterlaced ? "Interlaced" : "Progressive");
-
- if (Rotation != Rotate.Degree0)
- {
- strs.Add($"- Rotation: {Rotation}");
- }
-
- return string.Join(" ", strs);
- }
-
-
- ///
- /// Creates and fills a PathAdvancedTargetInfo object
- ///
- /// The newly created PathAdvancedTargetInfo object
- public PathAdvancedTargetInfo GetPathAdvancedTargetInfo()
- {
- if (TVFormat == TVFormat.None)
- {
- return new PathAdvancedTargetInfo(Rotation, Scaling, RefreshRateInMillihertz, TimingOverride,
- IsInterlaced, IsClonePrimary, IsClonePanAndScanTarget, DisableVirtualModeSupport,
- IsPreferredUnscaledTarget);
- }
-
- return new PathAdvancedTargetInfo(Rotation, Scaling, TVFormat, TVConnectorType, RefreshRateInMillihertz,
- TimingOverride, IsInterlaced, IsClonePrimary, IsClonePanAndScanTarget, DisableVirtualModeSupport,
- IsPreferredUnscaledTarget);
- }
-
- ///
- /// Creates and fills a PathTargetInfoV1 object
- ///
- /// The newly created PathTargetInfoV1 object
- public PathTargetInfoV1 GetPathTargetInfoV1()
- {
- var pathAdvancedTargetInfo = GetPathAdvancedTargetInfo();
-
- return new PathTargetInfoV1(DisplayDevice.DisplayId, pathAdvancedTargetInfo);
- }
-
- ///
- /// Creates and fills a PathTargetInfoV2 object
- ///
- /// The newly created PathTargetInfoV2 object
- public PathTargetInfoV2 GetPathTargetInfoV2()
- {
- var pathAdvancedTargetInfo = GetPathAdvancedTargetInfo();
-
- return new PathTargetInfoV2(DisplayDevice.DisplayId, WindowsCCDTargetId, pathAdvancedTargetInfo);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/ScanOutInformation.cs b/app/NvAPIWrapper/Display/ScanOutInformation.cs
deleted file mode 100644
index 9ec2c09b..00000000
--- a/app/NvAPIWrapper/Display/ScanOutInformation.cs
+++ /dev/null
@@ -1,218 +0,0 @@
-using System.Linq;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Display;
-using NvAPIWrapper.Native.Display.Structures;
-using NvAPIWrapper.Native.General.Structures;
-using Rectangle = NvAPIWrapper.Native.General.Structures.Rectangle;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Contains information regarding the scan-out buffer settings of a display device
- ///
- public class ScanOutInformation
- {
- internal ScanOutInformation(DisplayDevice displayDevice)
- {
- DisplayDevice = displayDevice;
- }
-
- ///
- /// Gets the clone importance assigned to the target if the target is a cloned view of the SourceDesktopRectangle
- /// (0:primary,1 secondary,...).
- ///
- public uint CloneImportance
- {
- get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).CloneImportance;
- }
-
- ///
- /// Gets the display device that this instance describes
- ///
- public DisplayDevice DisplayDevice { get; }
-
- ///
- /// Gets a boolean value indicating if the display device scan out output is warped
- ///
- public bool IsDisplayWarped
- {
- get => DisplayApi.GetScanOutWarpingState(DisplayDevice.DisplayId).IsEnabled;
- }
-
- ///
- /// Gets a boolean value indicating if the display device intensity is modified
- ///
- public bool IsIntensityModified
- {
- get => DisplayApi.GetScanOutIntensityState(DisplayDevice.DisplayId).IsEnabled;
- }
-
- ///
- /// Gets the operating system display device rectangle in desktop coordinates displayId is scanning out from.
- ///
- public Rectangle SourceDesktopRectangle
- {
- get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).SourceDesktopRectangle;
- }
-
- ///
- /// Gets the rotation performed between the SourceViewPortRectangle and the TargetViewPortRectangle.
- ///
- public Rotate SourceToTargetRotation
- {
- get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).SourceToTargetRotation;
- }
-
- ///
- /// Gets the area inside the SourceDesktopRectangle which is scanned out to the display.
- ///
- public Rectangle SourceViewPortRectangle
- {
- get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).SourceViewPortRectangle;
- }
-
- ///
- /// Gets the vertical size of the active resolution scanned out to the display.
- ///
- public uint TargetDisplayHeight
- {
- get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).TargetDisplayHeight;
- }
-
- ///
- /// Gets the horizontal size of the active resolution scanned out to the display.
- ///
- public uint TargetDisplayWidth
- {
- get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).TargetDisplayWidth;
- }
-
- ///
- /// Gets the area inside the rectangle described by targetDisplayWidth/Height SourceViewPortRectangle is scanned out
- /// to.
- ///
- public Rectangle TargetViewPortRectangle
- {
- get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).TargetViewPortRectangle;
- }
-
- ///
- /// Disables the intensity modification on the display device scan-out buffer.
- ///
- /// A boolean value that indicates whether the settings will be kept over a reboot.
- public void DisableIntensityModifications(out bool isSticky)
- {
- DisplayApi.SetScanOutIntensity(DisplayDevice.DisplayId, null, out isSticky);
- }
-
- ///
- /// Disables the warping of display device scan-out buffer.
- ///
- /// A boolean value that indicates whether the settings will be kept over a reboot.
- public void DisableWarping(out bool isSticky)
- {
- var vorticesCount = 0;
- DisplayApi.SetScanOutWarping(DisplayDevice.DisplayId, null, ref vorticesCount, out isSticky);
- }
-
- ///
- /// Enables the intensity modification on the display device scan-out buffer.
- ///
- /// The intensity texture to apply to the scan-out buffer.
- /// A boolean value that indicates whether the settings will be kept over a reboot.
- public void EnableIntensityModifications(IntensityTexture intensityTexture, out bool isSticky)
- {
- using (
- var intensity = new ScanOutIntensityV1(
- (uint) intensityTexture.Width,
- (uint) intensityTexture.Height,
- intensityTexture.ToFloatArray()
- )
- )
- {
- DisplayApi.SetScanOutIntensity(DisplayDevice.DisplayId, intensity, out isSticky);
- }
- }
-
- ///
- /// Enables the intensity modification on the display device scan-out buffer.
- ///
- /// The intensity texture to apply to the scan-out buffer.
- /// The offset texture to apply to the scan-out buffer.
- /// A boolean value that indicates whether the settings will be kept over a reboot.
- public void EnableIntensityModifications(
- IntensityTexture intensityTexture,
- FloatTexture offsetTexture,
- out bool isSticky)
- {
- using (
- var intensity = new ScanOutIntensityV2(
- (uint) intensityTexture.Width,
- (uint) intensityTexture.Height,
- intensityTexture.ToFloatArray(),
- (uint) offsetTexture.Channels,
- offsetTexture.ToFloatArray()
- )
- )
- {
- DisplayApi.SetScanOutIntensity(DisplayDevice.DisplayId, intensity, out isSticky);
- }
- }
-
- ///
- /// Enables the warping of display device scan-out buffer
- ///
- /// The type of warping vortexes.
- /// An array of warping vortexes.
- /// The rectangle in desktop coordinates describing the source area for the warping.
- /// A boolean value that indicates whether the settings will be kept over a reboot.
- // ReSharper disable once TooManyArguments
- public void EnableWarping(
- WarpingVerticeFormat warpingVerticeFormat,
- XYUVRQVortex[] vortices,
- Rectangle textureRectangle,
- out bool isSticky)
- {
- using (
- var warping = new ScanOutWarpingV1(
- warpingVerticeFormat,
- vortices.SelectMany(vortex => vortex.AsFloatArray()).ToArray(),
- textureRectangle
- )
- )
- {
- var vorticesCount = vortices.Length;
- DisplayApi.SetScanOutWarping(DisplayDevice.DisplayId, warping, ref vorticesCount, out isSticky);
- }
- }
-
- ///
- /// Queries the current state of one of the various scan-out composition parameters.
- ///
- /// The scan-out composition parameter.
- /// The additional value included with the parameter value.
- /// The scan-out composition parameter value.
- public ScanOutCompositionParameterValue GetCompositionParameterValue(
- ScanOutCompositionParameter parameter,
- out float additionalValue)
- {
- return DisplayApi.GetScanOutCompositionParameter(DisplayDevice.DisplayId, parameter, out additionalValue);
- }
-
-
- ///
- /// Sets the current state of one of the various scan-out composition parameters.
- ///
- /// The scan-out composition parameter.
- /// The scan-out composition parameter value.
- /// The additional value included with the parameter value.
- public void SetCompositionParameterValue(
- ScanOutCompositionParameter parameter,
- ScanOutCompositionParameterValue parameterValue,
- float additionalValue)
- {
- DisplayApi.SetScanOutCompositionParameter(DisplayDevice.DisplayId, parameter, parameterValue,
- ref additionalValue);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/UnAttachedDisplay.cs b/app/NvAPIWrapper/Display/UnAttachedDisplay.cs
deleted file mode 100644
index 1af2c330..00000000
--- a/app/NvAPIWrapper/Display/UnAttachedDisplay.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-using System;
-using System.Linq;
-using NvAPIWrapper.GPU;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Display.Structures;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents an unattached display
- ///
- public class UnAttachedDisplay : IEquatable
- {
- ///
- /// Creates a new UnAttachedDisplay
- ///
- /// Handle of the unattached display device
- public UnAttachedDisplay(UnAttachedDisplayHandle handle)
- {
- Handle = handle;
- }
-
- ///
- /// Creates a new UnAttachedDisplay
- ///
- /// Name of the unattached display device
- public UnAttachedDisplay(string displayName)
- {
- Handle = DisplayApi.GetAssociatedUnAttachedNvidiaDisplayHandle(displayName);
- }
-
- ///
- /// Gets display handle
- ///
- public UnAttachedDisplayHandle Handle { get; }
-
- ///
- /// Gets display name
- ///
- public string Name
- {
- get => DisplayApi.GetUnAttachedAssociatedDisplayName(Handle);
- }
-
- ///
- /// Gets corresponding physical GPU
- ///
- public PhysicalGPU PhysicalGPU
- {
- get => new PhysicalGPU(GPUApi.GetPhysicalGPUFromUnAttachedDisplay(Handle));
- }
-
- ///
- /// Checks for equality with a UnAttachedDisplay instance
- ///
- /// The Display object to check with
- /// true if both objects are equal, otherwise false
- public bool Equals(UnAttachedDisplay other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Handle.Equals(other.Handle);
- }
-
- ///
- /// This function returns all unattached NVIDIA displays
- /// Note: Display handles can get invalidated on a modeset.
- ///
- /// An array of Display objects
- public static UnAttachedDisplay[] GetUnAttachedDisplays()
- {
- return
- DisplayApi.EnumNvidiaUnAttachedDisplayHandle().Select(handle => new UnAttachedDisplay(handle))
- .ToArray();
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(UnAttachedDisplay left, UnAttachedDisplay right)
- {
- return right?.Equals(left) ?? ReferenceEquals(left, null);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(UnAttachedDisplay left, UnAttachedDisplay right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((UnAttachedDisplay) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- return Handle.GetHashCode();
- }
-
- ///
- public override string ToString()
- {
- return Name;
- }
-
- ///
- /// Creates a new active attached display from this unattached display
- /// At least one GPU must be present in the system and running an NVIDIA display driver.
- ///
- /// An active attached display
- public Display CreateDisplay()
- {
- return new Display(DisplayApi.CreateDisplayFromUnAttachedDisplay(Handle));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Display/XYUVRQVortex.cs b/app/NvAPIWrapper/Display/XYUVRQVortex.cs
deleted file mode 100644
index f90a955e..00000000
--- a/app/NvAPIWrapper/Display/XYUVRQVortex.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace NvAPIWrapper.Display
-{
- ///
- /// Represents a XYUVRQ scan-out warping vortex
- ///
- public class XYUVRQVortex : IEquatable
- {
- ///
- /// Creates a new instance of .
- ///
- /// The target view port mesh horizontal coordinate
- /// The target view port mesh vertical coordinate
- /// The desktop view port texture horizontal coordinate
- /// The desktop view port texture vertical coordinate
- /// The 3D warp perspective R factor
- /// The 3D warp perspective Q factor
- // ReSharper disable once TooManyDependencies
- public XYUVRQVortex(int x, int y, int u, int v, float r, float q)
- {
- X = x;
- Y = y;
- U = u;
- V = v;
- R = r;
- Q = q;
- }
-
- ///
- /// 3D warp perspective Q factor
- ///
- public float Q { get; }
-
- ///
- /// 3D warp perspective R factor
- ///
- public float R { get; }
-
- ///
- /// Desktop view port texture horizontal coordinate
- ///
- public int U { get; }
-
- ///
- /// Desktop view port texture vertical coordinate
- ///
- public int V { get; }
-
- ///
- /// Target view port mesh horizontal coordinate
- ///
- public int X { get; }
-
- ///
- /// Target view port mesh vertical coordinate
- ///
- public int Y { get; }
-
- ///
- public bool Equals(XYUVRQVortex other)
- {
- if (other == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Math.Abs(Q - other.Q) < 0.0001 &&
- Math.Abs(R - other.R) < 0.0001 &&
- U == other.U &&
- V == other.V &&
- X == other.X &&
- Y == other.Y;
- }
-
- ///
- /// Parses an array of floats and returns the corresponding s.
- ///
- /// The array of float representing one or more s.
- /// Instances of .
- public static IEnumerable FromFloatArray(float[] floats)
- {
- for (var i = 0; i + 6 <= floats.Length; i += 6)
- {
- yield return new XYUVRQVortex(
- (int) floats[i],
- (int) floats[i + 1],
- (int) floats[i + 2],
- (int) floats[i + 3],
- floats[i + 4],
- floats[i + 5]
- );
- }
- }
-
- ///
- /// Compares two instance of for equality.
- ///
- /// The first instance.
- /// The second instance.
- /// if both instances are equal, otherwise
- public static bool operator ==(XYUVRQVortex left, XYUVRQVortex right)
- {
- return Equals(left, right) || left?.Equals(right) == true;
- }
-
- ///
- /// Compares two instance of for in-equality.
- ///
- /// The first instance.
- /// The second instance.
- /// if both instances are not equal, otherwise
- public static bool operator !=(XYUVRQVortex left, XYUVRQVortex right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (obj == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- return Equals(obj as XYUVRQVortex);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = Q.GetHashCode();
- hashCode = (hashCode * 397) ^ R.GetHashCode();
- hashCode = (hashCode * 397) ^ U;
- hashCode = (hashCode * 397) ^ V;
- hashCode = (hashCode * 397) ^ X;
- hashCode = (hashCode * 397) ^ Y;
-
- return hashCode;
- }
- }
-
- ///
- /// Returns this instance of as a float array.
- ///
- /// An array of float values representing this instance of .
- public float[] AsFloatArray()
- {
- return new[] {X, Y, U, V, R, Q};
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/AGPInformation.cs b/app/NvAPIWrapper/GPU/AGPInformation.cs
deleted file mode 100644
index 25a80841..00000000
--- a/app/NvAPIWrapper/GPU/AGPInformation.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about the accelerated graphics connection
- ///
- public class AGPInformation
- {
- internal AGPInformation(int aperture, int currentRate)
- {
- ApertureInMB = aperture;
- CurrentRate = currentRate;
- }
-
- ///
- /// Gets AGP aperture in megabytes
- ///
- public int ApertureInMB { get; }
-
- ///
- /// Gets current AGP Rate (0 = AGP not present, 1 = 1x, 2 = 2x, etc.)
- ///
- public int CurrentRate { get; }
-
- ///
- public override string ToString()
- {
- return $"AGP Aperture: {ApertureInMB}MB, Current Rate: {CurrentRate}x";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/ECCMemoryInformation.cs b/app/NvAPIWrapper/GPU/ECCMemoryInformation.cs
deleted file mode 100644
index 486182df..00000000
--- a/app/NvAPIWrapper/GPU/ECCMemoryInformation.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about the ECC memory
- ///
- public class ECCMemoryInformation
- {
- internal ECCMemoryInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets the number of aggregated ECC memory double bit errors
- ///
- public ulong AggregatedDoubleBitErrors
- {
- get
- {
- if (!IsSupported || !IsEnabled)
- {
- return 0;
- }
-
- return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).AggregatedErrors.DoubleBitErrors;
- }
- }
-
-
- ///
- /// Gets the number of aggregated ECC memory single bit errors
- ///
- public ulong AggregatedSingleBitErrors
- {
- get
- {
- if (!IsSupported || !IsEnabled)
- {
- return 0;
- }
-
- return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).AggregatedErrors.SingleBitErrors;
- }
- }
-
- ///
- /// Gets the ECC memory configuration in regard to how changes are applied
- ///
- public ECCConfiguration Configuration
- {
- get
- {
- try
- {
- return GPUApi.GetECCStatusInfo(PhysicalGPU.Handle).ConfigurationOptions;
- }
- catch
- {
- return ECCConfiguration.NotSupported;
- }
- }
- }
-
- ///
- /// Gets the number of current ECC memory double bit errors
- ///
- public ulong CurrentDoubleBitErrors
- {
- get
- {
- if (!IsSupported || !IsEnabled)
- {
- return 0;
- }
-
- return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).CurrentErrors.DoubleBitErrors;
- }
- }
-
- ///
- /// Gets the number of current ECC memory single bit errors
- ///
- public ulong CurrentSingleBitErrors
- {
- get
- {
- if (!IsSupported || !IsEnabled)
- {
- return 0;
- }
-
- return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).CurrentErrors.SingleBitErrors;
- }
- }
-
- ///
- /// Gets a boolean value indicating if ECC memory error correction is enabled
- ///
-
- public bool IsEnabled
- {
- get => IsSupported &&
- GPUApi.GetECCStatusInfo(PhysicalGPU.Handle).IsEnabled &&
- GPUApi.GetECCConfigurationInfo(PhysicalGPU.Handle).IsEnabled;
- }
-
- ///
- /// Gets a boolean value indicating if ECC memory is enabled by default
- ///
- public bool IsEnabledByDefault
- {
- get => IsSupported &&
- GPUApi.GetECCConfigurationInfo(PhysicalGPU.Handle).IsEnabledByDefault;
- }
-
- ///
- /// Gets a boolean value indicating if ECC memory is supported and available
- ///
- public bool IsSupported
- {
- get
- {
- try
- {
- return GPUApi.GetECCStatusInfo(PhysicalGPU.Handle).IsSupported;
- }
- catch
- {
- return false;
- }
- }
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- public override string ToString()
- {
- if (!IsSupported)
- {
- return "[Not Supported]";
- }
-
- if (!IsEnabled)
- {
- return "[Disabled]";
- }
-
- return
- $"{CurrentSingleBitErrors}, {CurrentDoubleBitErrors} ({AggregatedSingleBitErrors}, {AggregatedDoubleBitErrors})";
- }
-
- ///
- /// Clears aggregated error counters.
- ///
- public void ClearAggregatedErrors()
- {
- GPUApi.ResetECCErrorInfo(PhysicalGPU.Handle, false, true);
- }
-
- ///
- /// Clears current error counters.
- ///
- public void ClearCurrentErrors()
- {
- GPUApi.ResetECCErrorInfo(PhysicalGPU.Handle, true, false);
- }
-
- ///
- /// Clears all error counters.
- ///
- public void ClearErrors()
- {
- GPUApi.ResetECCErrorInfo(PhysicalGPU.Handle, true, true);
- }
-
- ///
- /// Disables ECC memory error correction.
- ///
- /// A boolean value to indicate if this change should get applied immediately
- public void Disable(bool immediate)
- {
- GPUApi.SetECCConfiguration(PhysicalGPU.Handle, false, immediate);
- }
-
- ///
- /// Enables ECC memory error correction.
- ///
- /// A boolean value to indicate if this change should get applied immediately
- public void Enable(bool immediate)
- {
- GPUApi.SetECCConfiguration(PhysicalGPU.Handle, true, immediate);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUArchitectInformation.cs b/app/NvAPIWrapper/GPU/GPUArchitectInformation.cs
deleted file mode 100644
index c489e25f..00000000
--- a/app/NvAPIWrapper/GPU/GPUArchitectInformation.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using NvAPIWrapper.Native;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains physical GPU architect information
- ///
- public class GPUArchitectInformation
- {
- internal GPUArchitectInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets total number of cores defined for this GPU, or zero for older architectures
- ///
- public int NumberOfCores
- {
- get => (int) GPUApi.GetGPUCoreCount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the number of graphics processing clusters (aka GPU Partitions)
- ///
- public int NumberOfGPC
- {
- get => (int) GPUApi.GetPartitionCount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the number of render output units
- ///
- public int NumberOfROPs
- {
- get => (int) GPUApi.GetROPCount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the number of shader pipelines
- ///
- public int NumberOfShaderPipelines
- {
- get => (int) GPUApi.GetShaderPipeCount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the number of shader sub pipelines
- ///
- public int NumberOfShaderSubPipelines
- {
- get => (int) GPUApi.GetShaderSubPipeCount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the number of video processing engines
- ///
- public int NumberOfVPEs
- {
- get => (int) GPUApi.GetVPECount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- /// Gets the GPU revision number (should be displayed as a hex string)
- ///
- public int Revision
- {
- get => (int) GPUApi.GetArchitectInfo(PhysicalGPU.Handle).Revision;
- }
-
- ///
- /// Gets the GPU short name (aka Codename)
- ///
- public string ShortName
- {
- get => GPUApi.GetShortName(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the total number of streaming multiprocessors
- ///
- public int TotalNumberOfSMs
- {
- get => (int) GPUApi.GetTotalSMCount(PhysicalGPU.Handle);
- }
-
-
- ///
- /// Gets the total number of streaming processors
- ///
- public int TotalNumberOfSPs
- {
- get => (int) GPUApi.GetTotalSPCount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the total number of texture processing clusters
- ///
- public int TotalNumberOfTPCs
- {
- get => (int) GPUApi.GetTotalTPCCount(PhysicalGPU.Handle);
- }
-
- ///
- public override string ToString()
- {
- return $"[{ShortName} REV{Revision:X}] Cores: {NumberOfCores}";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUBusInformation.cs b/app/NvAPIWrapper/GPU/GPUBusInformation.cs
deleted file mode 100644
index 4e47776d..00000000
--- a/app/NvAPIWrapper/GPU/GPUBusInformation.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about the GPU bus
- ///
- public class GPUBusInformation
- {
- internal GPUBusInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets accelerated graphics port information
- ///
- public AGPInformation AGPInformation
- {
- get
- {
- if (BusType != GPUBusType.AGP)
- {
- return null;
- }
-
- return new AGPInformation(
- GPUApi.GetAGPAperture(PhysicalGPU.Handle),
- GPUApi.GetCurrentAGPRate(PhysicalGPU.Handle)
- );
- }
- }
-
- ///
- /// Gets the bus identification
- ///
- public int BusId
- {
- get => GPUApi.GetBusId(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the bus slot identification
- ///
- public int BusSlot
- {
- get => GPUApi.GetBusSlotId(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the the bus type
- ///
- public GPUBusType BusType
- {
- get => GPUApi.GetBusType(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets number of PCIe lanes being used for the PCIe interface downstream
- ///
- public int CurrentPCIeLanes
- {
- get
- {
- if (BusType == GPUBusType.PCIExpress)
- {
- return GPUApi.GetCurrentPCIEDownStreamWidth(PhysicalGPU.Handle);
- }
-
- return 0;
- }
- }
-
- ///
- /// Gets GPU interrupt number
- ///
- public int IRQ
- {
- get => GPUApi.GetIRQ(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the PCI identifiers
- ///
- public PCIIdentifiers PCIIdentifiers
- {
- get
- {
- if (BusType == GPUBusType.FPCI || BusType == GPUBusType.PCI || BusType == GPUBusType.PCIExpress)
- {
- GPUApi.GetPCIIdentifiers(
- PhysicalGPU.Handle,
- out var deviceId,
- out var subSystemId,
- out var revisionId,
- out var extDeviceId
- );
-
- return new PCIIdentifiers(deviceId, subSystemId, revisionId, (int) extDeviceId);
- }
-
- return null;
- }
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- public override string ToString()
- {
- return $"[{BusType}] Bus #{BusId}, Slot #{BusSlot}";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUCooler.cs b/app/NvAPIWrapper/GPU/GPUCooler.cs
deleted file mode 100644
index 86d68166..00000000
--- a/app/NvAPIWrapper/GPU/GPUCooler.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-using System;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information regarding a GPU cooler entry
- ///
- public class GPUCooler
- {
- internal GPUCooler(int coolerId, PrivateCoolerSettingsV1.CoolerSetting coolerSetting, int currentRPM = -1)
- {
- CoolerId = coolerId;
- CurrentLevel = (int) coolerSetting.CurrentLevel;
- DefaultMinimumLevel = (int) coolerSetting.DefaultMinimumLevel;
- DefaultMaximumLevel = (int) coolerSetting.DefaultMaximumLevel;
- CurrentMinimumLevel = (int) coolerSetting.CurrentMinimumLevel;
- CurrentMaximumLevel = (int) coolerSetting.CurrentMaximumLevel;
- CoolerType = coolerSetting.CoolerType;
- CoolerController = coolerSetting.CoolerController;
- DefaultPolicy = coolerSetting.DefaultPolicy;
- CurrentPolicy = coolerSetting.CurrentPolicy;
- Target = coolerSetting.Target;
- ControlMode = coolerSetting.ControlMode;
- CurrentFanSpeedInRPM = currentRPM;
- }
-
- // ReSharper disable once TooManyDependencies
- internal GPUCooler(
- PrivateFanCoolersInfoV1.FanCoolersInfoEntry infoEntry,
- PrivateFanCoolersStatusV1.FanCoolersStatusEntry statusEntry,
- PrivateFanCoolersControlV1.FanCoolersControlEntry controlEntry)
- {
- if (infoEntry.CoolerId != statusEntry.CoolerId || statusEntry.CoolerId != controlEntry.CoolerId)
- {
- throw new ArgumentException("Passed arguments are meant to be for different coolers.");
- }
-
- CoolerId = (int) statusEntry.CoolerId;
- CurrentLevel = (int) statusEntry.CurrentLevel;
- DefaultMinimumLevel = (int) statusEntry.CurrentMinimumLevel;
- DefaultMaximumLevel = (int) statusEntry.CurrentMaximumLevel;
- CurrentMinimumLevel = (int) statusEntry.CurrentMinimumLevel;
- CurrentMaximumLevel = (int) statusEntry.CurrentMaximumLevel;
- CoolerType = CoolerType.Fan;
- CoolerController = CoolerController.Internal;
- DefaultPolicy = CoolerPolicy.None;
- CurrentPolicy = controlEntry.ControlMode == FanCoolersControlMode.Manual
- ? CoolerPolicy.Manual
- : CoolerPolicy.None;
- Target = CoolerTarget.All;
- ControlMode = CoolerControlMode.Variable;
- CurrentFanSpeedInRPM = (int) statusEntry.CurrentRPM;
- }
-
- ///
- /// Gets the cooler control mode
- ///
- public CoolerControlMode ControlMode { get; }
-
- ///
- /// Gets the cooler controller
- ///
- public CoolerController CoolerController { get; }
-
- ///
- /// Gets the cooler identification number or index
- ///
- public int CoolerId { get; }
-
- ///
- /// Gets the cooler type
- ///
- public CoolerType CoolerType { get; }
-
- ///
- /// Gets the GPU fan speed in revolutions per minute
- ///
- public int CurrentFanSpeedInRPM { get; }
-
- ///
- /// Gets the cooler current level in percentage
- ///
- public int CurrentLevel { get; }
-
-
- ///
- /// Gets the cooler current maximum level in percentage
- ///
- public int CurrentMaximumLevel { get; }
-
-
- ///
- /// Gets the cooler current minimum level in percentage
- ///
- public int CurrentMinimumLevel { get; }
-
- ///
- /// Gets the cooler current policy
- ///
- public CoolerPolicy CurrentPolicy { get; }
-
- ///
- /// Gets the cooler default maximum level in percentage
- ///
- public int DefaultMaximumLevel { get; }
-
- ///
- /// Gets the cooler default minimum level in percentage
- ///
- public int DefaultMinimumLevel { get; }
-
- ///
- /// Gets the cooler default policy
- ///
- public CoolerPolicy DefaultPolicy { get; }
-
- ///
- /// Gets the cooler target
- ///
- public CoolerTarget Target { get; }
-
- ///
- public override string ToString()
- {
- return $"[{CoolerId} @ {CoolerController}] {Target}: {CurrentLevel}%";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUCoolerInformation.cs b/app/NvAPIWrapper/GPU/GPUCoolerInformation.cs
deleted file mode 100644
index 9be8cc86..00000000
--- a/app/NvAPIWrapper/GPU/GPUCoolerInformation.cs
+++ /dev/null
@@ -1,340 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Exceptions;
-using NvAPIWrapper.Native.General;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about the GPU coolers and current fan speed
- ///
- public class GPUCoolerInformation
- {
- internal GPUCoolerInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
-
- // TODO: Add Support For Pascal Only Policy Table Method
- // TODO: GPUApi.GetCoolerPolicyTable & GPUApi.SetCoolerPolicyTable & GPUApi.RestoreCoolerPolicyTable
- // TODO: Better support of ClientFanCoolers set of APIs
- }
-
- ///
- /// Gets a list of all available coolers along with their current settings and status
- ///
- public IEnumerable Coolers
- {
- get
- {
- PrivateCoolerSettingsV1? settings = null;
-
- try
- {
- settings = GPUApi.GetCoolerSettings(PhysicalGPU.Handle);
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status != Status.NotSupported)
- {
- throw;
- }
- }
-
- if (settings != null)
- {
- for (var i = 0; i < settings.Value.CoolerSettings.Length; i++)
- {
- if (i == 0)
- {
- var currentRPM = -1;
- try
- {
- currentRPM = (int)GPUApi.GetTachReading(PhysicalGPU.Handle);
- }
- catch (NVIDIAApiException)
- {
- // ignored
- }
-
- if (currentRPM >= 0)
- {
- yield return new GPUCooler(
- i,
- settings.Value.CoolerSettings[i],
- currentRPM
- );
- continue;
- }
- }
-
- yield return new GPUCooler(
- i,
- settings.Value.CoolerSettings[i]
- );
- }
-
- yield break;
- }
-
- PrivateFanCoolersStatusV1? status = null;
- PrivateFanCoolersInfoV1? info = null;
- PrivateFanCoolersControlV1? control = null;
-
- try
- {
- status = GPUApi.GetClientFanCoolersStatus(PhysicalGPU.Handle);
- info = GPUApi.GetClientFanCoolersInfo(PhysicalGPU.Handle);
- control = GPUApi.GetClientFanCoolersControl(PhysicalGPU.Handle);
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status != Status.NotSupported)
- {
- throw;
- }
- }
-
- if (status != null && info != null && control != null)
- {
- for (var i = 0; i < status.Value.FanCoolersStatusEntries.Length; i++)
- {
- if (info.Value.FanCoolersInfoEntries.Length > i &&
- control.Value.FanCoolersControlEntries.Length > i)
- {
- yield return new GPUCooler(
- info.Value.FanCoolersInfoEntries[i],
- status.Value.FanCoolersStatusEntries[i],
- control.Value.FanCoolersControlEntries[i]
- );
- }
- }
-
- yield break;
- }
-
- throw new NVIDIAApiException(Status.NotSupported);
- }
- }
-
- ///
- /// Gets the GPU fan speed in revolutions per minute
- ///
- public int CurrentFanSpeedInRPM
- {
- get
- {
- try
- {
- return (int) GPUApi.GetTachReading(PhysicalGPU.Handle);
- }
- catch
- {
- return Coolers.FirstOrDefault(cooler => cooler.Target == CoolerTarget.All)?.CurrentFanSpeedInRPM ??
- 0;
- }
- }
- }
-
- ///
- /// Gets the current fan speed in percentage if available
- ///
- public int CurrentFanSpeedLevel
- {
- get
- {
- try
- {
- return (int) GPUApi.GetCurrentFanSpeedLevel(PhysicalGPU.Handle);
- }
- catch
- {
- return Coolers.FirstOrDefault(cooler => cooler.Target == CoolerTarget.All)?.CurrentLevel ?? 0;
- }
- }
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- public override string ToString()
- {
- return $"{CurrentFanSpeedInRPM} RPM ({CurrentFanSpeedLevel}%)";
- }
-
- ///
- /// Resets all cooler settings to default.
- ///
- public void RestoreCoolerSettingsToDefault()
- {
- RestoreCoolerSettingsToDefault(Coolers.Select(cooler => cooler.CoolerId).ToArray());
- }
-
- ///
- /// Resets one or more cooler settings to default.
- ///
- /// The cooler identification numbers (indexes) to reset their settings to default.
- public void RestoreCoolerSettingsToDefault(params int[] coolerIds)
- {
- var availableCoolerIds = Coolers.Select(cooler => cooler.CoolerId).ToArray();
-
- if (coolerIds.Any(i => !availableCoolerIds.Contains(i)))
- {
- throw new ArgumentException("Invalid cooler identification number provided.", nameof(coolerIds));
- }
-
- try
- {
- GPUApi.RestoreCoolerSettings(PhysicalGPU.Handle, coolerIds.Select(i => (uint) i).ToArray());
-
- return;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status != Status.NotSupported)
- {
- throw;
- }
- }
-
- var currentControl = GPUApi.GetClientFanCoolersControl(PhysicalGPU.Handle);
- var newControl = new PrivateFanCoolersControlV1(
- currentControl.FanCoolersControlEntries.Select(
- entry => coolerIds.Contains((int) entry.CoolerId)
- ? new PrivateFanCoolersControlV1.FanCoolersControlEntry(
- entry.CoolerId,
- FanCoolersControlMode.Auto
- )
- : entry
- )
- .ToArray(),
- currentControl.UnknownUInt
- );
- GPUApi.SetClientFanCoolersControl(PhysicalGPU.Handle, newControl);
- }
-
- ///
- /// Changes a cooler settings by modifying the policy and the current level
- ///
- /// The cooler identification number (index) to change the settings.
- /// The new cooler policy.
- /// The new cooler level. Valid only if policy is set to manual.
- // ReSharper disable once TooManyDeclarations
- public void SetCoolerSettings(int coolerId, CoolerPolicy policy, int newLevel)
- {
- if (Coolers.All(cooler => cooler.CoolerId != coolerId))
- {
- throw new ArgumentException("Invalid cooler identification number provided.", nameof(coolerId));
- }
-
- try
- {
- GPUApi.SetCoolerLevels(
- PhysicalGPU.Handle,
- (uint) coolerId,
- new PrivateCoolerLevelsV1(new[]
- {
- new PrivateCoolerLevelsV1.CoolerLevel(policy, (uint) newLevel)
- }
- ),
- 1
- );
-
- return;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status != Status.NotSupported)
- {
- throw;
- }
- }
-
- var currentControl = GPUApi.GetClientFanCoolersControl(PhysicalGPU.Handle);
- var newControl = new PrivateFanCoolersControlV1(
- currentControl.FanCoolersControlEntries.Select(
- entry => entry.CoolerId == coolerId
- ? new PrivateFanCoolersControlV1.FanCoolersControlEntry(
- entry.CoolerId,
- policy == CoolerPolicy.Manual
- ? FanCoolersControlMode.Manual
- : FanCoolersControlMode.Auto,
- policy == CoolerPolicy.Manual ? (uint)newLevel : 0u)
- : entry
- )
- .ToArray(),
- currentControl.UnknownUInt
- );
- GPUApi.SetClientFanCoolersControl(PhysicalGPU.Handle, newControl);
- }
-
- ///
- /// Changes a cooler setting by modifying the policy
- ///
- /// The cooler identification number (index) to change the settings.
- /// The new cooler policy.
- // ReSharper disable once TooManyDeclarations
- public void SetCoolerSettings(int coolerId, CoolerPolicy policy)
- {
- if (Coolers.All(cooler => cooler.CoolerId != coolerId))
- {
- throw new ArgumentException("Invalid cooler identification number provided.", nameof(coolerId));
- }
-
- try
- {
- GPUApi.SetCoolerLevels(
- PhysicalGPU.Handle,
- (uint) coolerId,
- new PrivateCoolerLevelsV1(new[]
- {
- new PrivateCoolerLevelsV1.CoolerLevel(policy)
- }
- ),
- 1
- );
-
- return;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status != Status.NotSupported)
- {
- throw;
- }
- }
-
- var currentControl = GPUApi.GetClientFanCoolersControl(PhysicalGPU.Handle);
- var newControl = new PrivateFanCoolersControlV1(
- currentControl.FanCoolersControlEntries.Select(
- entry => entry.CoolerId == coolerId
- ? new PrivateFanCoolersControlV1.FanCoolersControlEntry(
- entry.CoolerId,
- policy == CoolerPolicy.Manual
- ? FanCoolersControlMode.Manual
- : FanCoolersControlMode.Auto)
- : entry
- )
- .ToArray(),
- currentControl.UnknownUInt
- );
- GPUApi.SetClientFanCoolersControl(PhysicalGPU.Handle, newControl);
- }
-
- ///
- /// Changes a cooler settings by modifying the policy to manual and sets a new level
- ///
- /// The cooler identification number (index) to change the settings.
- /// The new cooler level.
- public void SetCoolerSettings(int coolerId, int newLevel)
- {
- SetCoolerSettings(coolerId, CoolerPolicy.Manual, newLevel);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUMemoryInformation.cs b/app/NvAPIWrapper/GPU/GPUMemoryInformation.cs
deleted file mode 100644
index 145403fd..00000000
--- a/app/NvAPIWrapper/GPU/GPUMemoryInformation.cs
+++ /dev/null
@@ -1,222 +0,0 @@
-using System;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information regarding the available and total memory as well as the type of memory and other information
- /// regarding the GPU RAM and frame buffer
- ///
- public class GPUMemoryInformation : IDisplayDriverMemoryInfo
- {
- internal GPUMemoryInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets the frame buffer bandwidth
- ///
-
- public int FrameBufferBandwidth
- {
- get
- {
- GPUApi.GetFrameBufferWidthAndLocation(PhysicalGPU.Handle, out var width, out _);
-
- return (int) width;
- }
- }
-
- ///
- /// Gets the frame buffer location index
- ///
- public int FrameBufferLocation
- {
- get
- {
- GPUApi.GetFrameBufferWidthAndLocation(PhysicalGPU.Handle, out _, out var location);
-
- return (int) location;
- }
- }
-
- ///
- /// Gets the internal clock to bus clock factor based on the type of RAM
- ///
- public int InternalClockToBusClockFactor
- {
- get => GetMemoryBusClockFactor(RAMType);
- }
-
- ///
- /// Gets the internal clock to transfer rate factor based on the type of RAM
- ///
- public int InternalClockToTransferRateFactor
- {
- get => GetMemoryTransferRateFactor(RAMType);
- }
-
- ///
- /// Gets GPU physical frame buffer size in KB. This does NOT include any system RAM that may be dedicated for use by
- /// the GPU.
- ///
- public int PhysicalFrameBufferSizeInkB
- {
- get => GPUApi.GetPhysicalFrameBufferSize(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- /// Gets the number of memory banks
- ///
- public uint RAMBanks
- {
- get => GPUApi.GetRAMBankCount(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the memory bus width
- ///
- public uint RAMBusWidth
- {
- get => GPUApi.GetRAMBusWidth(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the memory maker (brand)
- ///
- public GPUMemoryMaker RAMMaker
- {
- get => GPUApi.GetRAMMaker(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the memory type
- ///
- public GPUMemoryType RAMType
- {
- get => GPUApi.GetRAMType(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets virtual size of frame-buffer in KB for this GPU. This includes the physical RAM plus any system RAM that has
- /// been dedicated for use by the GPU.
- ///
- public int VirtualFrameBufferSizeInkB
- {
- get => GPUApi.GetVirtualFrameBufferSize(PhysicalGPU.Handle);
- }
-
- ///
- public uint AvailableDedicatedVideoMemoryInkB
- {
- get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).AvailableDedicatedVideoMemoryInkB;
- }
-
- ///
- public uint CurrentAvailableDedicatedVideoMemoryInkB
- {
- get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).CurrentAvailableDedicatedVideoMemoryInkB;
- }
-
- ///
- public uint DedicatedVideoMemoryInkB
- {
- get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).DedicatedVideoMemoryInkB;
- }
-
- ///
- public uint SharedSystemMemoryInkB
- {
- get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).SharedSystemMemoryInkB;
- }
-
- ///
- public uint SystemVideoMemoryInkB
- {
- get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).SystemVideoMemoryInkB;
- }
-
- ///
- /// Gets the memory bus clock to internal memory clock factor
- ///
- ///
- /// The value of X in X(InternalMemoryClock)=(BusMemoryClock)
- public static int GetMemoryBusClockFactor(GPUMemoryType memoryType)
- {
- switch (memoryType)
- {
- case GPUMemoryType.SDRAM:
-
- // Bus Clocks Per Internal Clock = 1
- return 1;
- case GPUMemoryType.DDR1:
- case GPUMemoryType.DDR2:
- case GPUMemoryType.DDR3:
- case GPUMemoryType.GDDR2:
- case GPUMemoryType.GDDR3:
- case GPUMemoryType.GDDR4:
- case GPUMemoryType.LPDDR2:
- case GPUMemoryType.GDDR5:
- case GPUMemoryType.GDDR5X:
-
- // Bus Clocks Per Internal Clock = 2
- return 2;
- default:
-
- throw new ArgumentOutOfRangeException(nameof(memoryType));
- }
- }
-
- ///
- /// Gets the number of transfers per internal memory clock factor
- ///
- ///
- /// The value of X in X(InternalMemoryClock)=(OperationsPerSecond)
- public static int GetMemoryTransferRateFactor(GPUMemoryType memoryType)
- {
- switch (memoryType)
- {
- case GPUMemoryType.SDRAM:
-
- // Transfers Per Internal Clock = 1
- return 1;
- case GPUMemoryType.DDR1:
- case GPUMemoryType.DDR2:
- case GPUMemoryType.DDR3:
- case GPUMemoryType.GDDR2:
- case GPUMemoryType.GDDR3:
- case GPUMemoryType.GDDR4:
- case GPUMemoryType.LPDDR2:
-
- // Transfers Per Internal Clock = 1
- return 2;
- case GPUMemoryType.GDDR5:
-
- // Transfers Per Internal Clock = 2
- return 4;
- case GPUMemoryType.GDDR5X:
-
- // Transfers Per Internal Clock = 4
- return 8;
- default:
-
- throw new ArgumentOutOfRangeException(nameof(memoryType));
- }
- }
-
- ///
- public override string ToString()
- {
- return
- $"[{RAMMaker} {RAMType}] Total: {AvailableDedicatedVideoMemoryInkB:N0} kB - Available: {CurrentAvailableDedicatedVideoMemoryInkB:N0} kB";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUOutput.cs b/app/NvAPIWrapper/GPU/GPUOutput.cs
deleted file mode 100644
index c9fb3b03..00000000
--- a/app/NvAPIWrapper/GPU/GPUOutput.cs
+++ /dev/null
@@ -1,264 +0,0 @@
-using System;
-using NvAPIWrapper.Display;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Exceptions;
-using NvAPIWrapper.Native.General;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents a single GPU output
- ///
- public class GPUOutput : IEquatable
- {
- internal GPUOutput(OutputId outputId, PhysicalGPUHandle gpuHandle)
- {
- OutputId = outputId;
- OutputType = !gpuHandle.IsNull ? GPUApi.GetOutputType(gpuHandle, outputId) : OutputType.Unknown;
- PhysicalGPU = new PhysicalGPU(gpuHandle);
- }
-
- internal GPUOutput(OutputId outputId, PhysicalGPU gpu)
- : this(outputId, gpu?.Handle ?? PhysicalGPUHandle.DefaultHandle)
- {
- PhysicalGPU = gpu;
- }
-
- ///
- /// Gets the corresponding Digital Vibrance Control information
- ///
- public DVCInformation DigitalVibranceControl
- {
- get => new DVCInformation(OutputId);
- }
-
- ///
- /// Gets the corresponding HUE information
- ///
- public HUEInformation HUEControl
- {
- get => new HUEInformation(OutputId);
- }
-
- ///
- /// Gets the output identification as a single bit unsigned integer
- ///
- public OutputId OutputId { get; }
-
- ///
- /// Gets the output type
- ///
- public OutputType OutputType { get; }
-
- ///
- /// Gets the corresponding physical GPU
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- public bool Equals(GPUOutput other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return PhysicalGPU.Equals(other.PhysicalGPU) && OutputId == other.OutputId;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(GPUOutput left, GPUOutput right)
- {
- return right?.Equals(left) ?? ReferenceEquals(left, null);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(GPUOutput left, GPUOutput right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((GPUOutput) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- return ((PhysicalGPU != null ? PhysicalGPU.GetHashCode() : 0) * 397) ^ (int) OutputId;
- }
- }
-
- ///
- public override string ToString()
- {
- return $"{OutputId} {OutputType} @ {PhysicalGPU}";
- }
-
- ///
- /// Overrides the refresh rate on this output.
- /// The new refresh rate can be applied right away or deferred to be applied with the next OS
- /// mode-set.
- /// The override is good for only one mode-set (regardless whether it's deferred or immediate).
- ///
- /// The refresh rate to be applied.
- ///
- /// A boolean value indicating if the refresh rate override should be deferred to the next OS
- /// mode-set.
- ///
- public void OverrideRefreshRate(float refreshRate, bool isDeferred = false)
- {
- DisplayApi.SetRefreshRateOverride(OutputId, refreshRate, isDeferred);
- }
-
- ///
- /// Reads data from the I2C bus
- ///
- /// The port id on which device is connected
- /// A boolean value indicating that the DDC port should be used instead of the communication port
- /// The device I2C slave address
- /// The target I2C register address
- /// The length of the buffer to allocate for the read operation.
- /// The target speed of the transaction in kHz
- public byte[] ReadI2C(
- byte? portId,
- bool useDDCPort,
- byte deviceAddress,
- byte[] registerAddress,
- uint readDataLength,
- I2CSpeed speed = I2CSpeed.Default
- )
- {
- try
- {
- // ReSharper disable once InconsistentNaming
- var i2cInfoV3 = new I2CInfoV3(
- OutputId,
- portId,
- useDDCPort,
- deviceAddress,
- registerAddress,
- readDataLength,
- speed
- );
-
- return PhysicalGPU.ReadI2C(i2cInfoV3);
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status != Status.IncompatibleStructureVersion || portId != null)
- {
- throw;
- }
-
- // ignore
- }
-
- // ReSharper disable once InconsistentNaming
- var i2cInfoV2 = new I2CInfoV2(
- OutputId,
- useDDCPort,
- deviceAddress,
- registerAddress,
- readDataLength,
- speed
- );
-
- return PhysicalGPU.ReadI2C(i2cInfoV2);
- }
-
- ///
- /// Writes data to the I2C bus
- ///
- /// The port id on which device is connected
- /// A boolean value indicating that the DDC port should be used instead of the communication port
- /// The device I2C slave address
- /// The target I2C register address
- /// The payload data
- /// The target speed of the transaction in kHz
- public void WriteI2C(
- byte? portId,
- bool useDDCPort,
- byte deviceAddress,
- byte[] registerAddress,
- byte[] data,
- I2CSpeed speed = I2CSpeed.Default
- )
- {
- try
- {
- // ReSharper disable once InconsistentNaming
- var i2cInfoV3 = new I2CInfoV3(
- OutputId,
- portId,
- useDDCPort,
- deviceAddress,
- registerAddress,
- data,
- speed
- );
-
- PhysicalGPU.WriteI2C(i2cInfoV3);
-
- return;
- }
- catch (NVIDIAApiException e)
- {
- if (e.Status != Status.IncompatibleStructureVersion || portId != null)
- {
- throw;
- }
-
- // ignore
- }
-
- // ReSharper disable once InconsistentNaming
- var i2cInfoV2 = new I2CInfoV2(
- OutputId,
- useDDCPort,
- deviceAddress,
- registerAddress,
- data,
- speed
- );
-
- PhysicalGPU.WriteI2C(i2cInfoV2);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPerformanceControl.cs b/app/NvAPIWrapper/GPU/GPUPerformanceControl.cs
deleted file mode 100644
index 6174cf83..00000000
--- a/app/NvAPIWrapper/GPU/GPUPerformanceControl.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information regarding the GPU performance control and limitations
- ///
- public class GPUPerformanceControl
- {
- internal GPUPerformanceControl(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets the current active performance limitation
- ///
- public PerformanceLimit CurrentActiveLimit
- {
- get => GPUApi.PerformancePoliciesGetStatus(PhysicalGPU.Handle).PerformanceLimit;
- }
-
- ///
- /// Gets the current performance decrease reason
- ///
- public PerformanceDecreaseReason CurrentPerformanceDecreaseReason
- {
- get => GPUApi.GetPerformanceDecreaseInfo(PhysicalGPU.Handle);
- }
-
-
- ///
- /// Gets a boolean value indicating if no load limit is supported with this GPU
- ///
- public bool IsNoLoadLimitSupported
- {
- get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsNoLoadLimitSupported;
- }
-
-
- ///
- /// Gets a boolean value indicating if power limit is supported with this GPU
- ///
- public bool IsPowerLimitSupported
- {
- get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsPowerLimitSupported;
- }
-
-
- ///
- /// Gets a boolean value indicating if temperature limit is supported with this GPU
- ///
- public bool IsTemperatureLimitSupported
- {
- get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsTemperatureLimitSupported;
- }
-
- ///
- /// Gets a boolean value indicating if voltage limit is supported with this GPU
- ///
- public bool IsVoltageLimitSupported
- {
- get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsVoltageLimitSupported;
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- /// Gets information regarding possible power limit policies and their acceptable range
- ///
- public IEnumerable PowerLimitInformation
- {
- get
- {
- return GPUApi.ClientPowerPoliciesGetInfo(PhysicalGPU.Handle).PowerPolicyInfoEntries
- .Select(entry => new GPUPowerLimitInfo(entry));
- }
- }
-
- ///
- /// Gets the current active power limit policies
- ///
- public IEnumerable PowerLimitPolicies
- {
- get
- {
- // TODO: GPUApi.ClientPowerPoliciesSetStatus();
- return GPUApi.ClientPowerPoliciesGetStatus(PhysicalGPU.Handle).PowerPolicyStatusEntries
- .Select(entry => new GPUPowerLimitPolicy(entry));
- }
- }
-
- ///
- /// Gets information regarding possible thermal limit policies and their acceptable range
- ///
- public IEnumerable ThermalLimitInformation
- {
- get
- {
- return GPUApi.GetThermalPoliciesInfo(PhysicalGPU.Handle).ThermalPoliciesInfoEntries
- .Select(entry => new GPUThermalLimitInfo(entry));
- }
- }
-
- ///
- /// Gets the current active thermal limit policies
- ///
- public IEnumerable ThermalLimitPolicies
- {
- get
- {
- // TODO: GPUApi.SetThermalPoliciesStatus();
- return GPUApi.GetThermalPoliciesStatus(PhysicalGPU.Handle).ThermalPoliciesStatusEntries
- .Select(entry => new GPUThermalLimitPolicy(entry));
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPerformanceState.cs b/app/NvAPIWrapper/GPU/GPUPerformanceState.cs
deleted file mode 100644
index 8344dada..00000000
--- a/app/NvAPIWrapper/GPU/GPUPerformanceState.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System.Linq;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents a performance state
- ///
- public class GPUPerformanceState
- {
- // ReSharper disable once TooManyDependencies
- internal GPUPerformanceState(
- int index,
- IPerformanceState20 performanceState,
- IPerformanceStates20ClockEntry[] statesClockEntries,
- IPerformanceStates20VoltageEntry[] baseVoltageEntries,
- PCIeInformation pcieInformation)
- {
- StateIndex = index;
- StateId = performanceState.StateId;
- IsReadOnly = !performanceState.IsEditable;
- Clocks = statesClockEntries.Select(entry => new GPUPerformanceStateClock(entry)).ToArray();
- Voltages = baseVoltageEntries.Select(entry => new GPUPerformanceStateVoltage(entry)).ToArray();
- PCIeInformation = pcieInformation;
- }
-
- ///
- /// Gets a list of clocks associated with this performance state
- ///
-
- public GPUPerformanceStateClock[] Clocks { get; }
-
- ///
- /// Gets a boolean value indicating if this performance state is readonly
- ///
- public bool IsReadOnly { get; }
-
- ///
- /// Gets the PCI-e information regarding this performance state.
- ///
- public PCIeInformation PCIeInformation { get; }
-
- ///
- /// Gets the performance state identification
- ///
- public PerformanceStateId StateId { get; }
-
- ///
- /// Gets the state index
- ///
- public int StateIndex { get; }
-
- ///
- /// Gets a list of voltages associated with this performance state
- ///
- public GPUPerformanceStateVoltage[] Voltages { get; }
-
- ///
- public override string ToString()
- {
- if (IsReadOnly)
- {
- return $"{StateId} (ReadOnly)";
- }
-
- return StateId.ToString();
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPerformanceStateClock.cs b/app/NvAPIWrapper/GPU/GPUPerformanceStateClock.cs
deleted file mode 100644
index e8afe070..00000000
--- a/app/NvAPIWrapper/GPU/GPUPerformanceStateClock.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents a performance state clock settings
- ///
- public class GPUPerformanceStateClock
- {
- internal GPUPerformanceStateClock(IPerformanceStates20ClockEntry states20ClockEntry)
- {
- ClockDomain = states20ClockEntry.DomainId;
- IsReadOnly = !states20ClockEntry.IsEditable;
- ClockDeltaInkHz = states20ClockEntry.FrequencyDeltaInkHz.DeltaValue;
- ClockDeltaRangeInkHz = new GPUPerformanceStateValueRange(
- states20ClockEntry.FrequencyDeltaInkHz.DeltaRange.Minimum,
- states20ClockEntry.FrequencyDeltaInkHz.DeltaRange.Maximum
- );
-
- if (states20ClockEntry.ClockType == PerformanceStates20ClockType.Range)
- {
- CurrentClockInkHz = new GPUPerformanceStateValueRange(
- states20ClockEntry.FrequencyRange.MinimumFrequencyInkHz,
- states20ClockEntry.FrequencyRange.MaximumFrequencyInkHz
- );
- BaseClockInkHz = new GPUPerformanceStateValueRange(
- CurrentClockInkHz.Minimum - ClockDeltaInkHz,
- CurrentClockInkHz.Maximum - ClockDeltaInkHz
- );
- DependentVoltageDomain = states20ClockEntry.FrequencyRange.VoltageDomainId;
- DependentVoltageRangeInMicroVolt = new GPUPerformanceStateValueRange(
- states20ClockEntry.FrequencyRange.MinimumVoltageInMicroVolt,
- states20ClockEntry.FrequencyRange.MaximumVoltageInMicroVolt
- );
- }
- else
- {
- CurrentClockInkHz = new GPUPerformanceStateValueRange(
- states20ClockEntry.SingleFrequency.FrequencyInkHz
- );
- BaseClockInkHz = new GPUPerformanceStateValueRange(
- CurrentClockInkHz.Minimum - ClockDeltaInkHz
- );
- DependentVoltageDomain = PerformanceVoltageDomain.Undefined;
- DependentVoltageRangeInMicroVolt = null;
- }
- }
-
- ///
- /// Gets the base clock frequency in kHz
- ///
- public GPUPerformanceStateValueRange BaseClockInkHz { get; }
-
- ///
- /// Gets the clock frequency delta in kHz
- ///
- public int ClockDeltaInkHz { get; }
-
- ///
- /// Gets the clock frequency delta range in kHz
- ///
- public GPUPerformanceStateValueRange ClockDeltaRangeInkHz { get; }
-
- ///
- /// Gets the clock domain
- ///
- public PublicClockDomain ClockDomain { get; }
-
- ///
- /// Gets the current clock frequency in kHz
- ///
- public GPUPerformanceStateValueRange CurrentClockInkHz { get; }
-
- ///
- /// Gets the dependent voltage domain
- ///
- public PerformanceVoltageDomain DependentVoltageDomain { get; }
-
- ///
- /// Gets the dependent voltage range in uV
- ///
- public GPUPerformanceStateValueRange DependentVoltageRangeInMicroVolt { get; }
-
- ///
- /// Gets a boolean value indicating if this clock setting is readonly
- ///
- public bool IsReadOnly { get; }
-
- ///
- public override string ToString()
- {
- var title = IsReadOnly ? $"{ClockDomain} (ReadOnly)" : ClockDomain.ToString();
-
- return
- $"{title}: {BaseClockInkHz} + ({ClockDeltaInkHz}) = {CurrentClockInkHz}";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPerformanceStateValueRange.cs b/app/NvAPIWrapper/GPU/GPUPerformanceStateValueRange.cs
deleted file mode 100644
index c3965751..00000000
--- a/app/NvAPIWrapper/GPU/GPUPerformanceStateValueRange.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents an integer value range
- ///
- public class GPUPerformanceStateValueRange : IEquatable
- {
- ///
- /// Creates a new instance of .
- ///
- /// The lower bound of the range.
- /// The upper bound of the range.
- public GPUPerformanceStateValueRange(long min, long max)
- {
- Minimum = min;
- Maximum = max;
- }
-
- ///
- /// Creates a new single value instance of .
- ///
- /// The only value in the range
- public GPUPerformanceStateValueRange(long value)
- {
- Minimum = value;
- Maximum = value;
- }
-
- ///
- /// Gets the upper bound of the inclusive range
- ///
- public long Maximum { get; }
-
- ///
- /// Gets the lower bound of the inclusive range
- ///
- public long Minimum { get; }
-
- ///
- public bool Equals(GPUPerformanceStateValueRange other)
- {
- if (other == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Maximum == other.Maximum && Minimum == other.Minimum;
- }
-
- ///
- /// Checks two instances of for equality.
- ///
- /// The left side of the comparison.
- /// The right side of the comparison.
- /// true if instances are equal, otherwise false
- public static bool operator ==(GPUPerformanceStateValueRange left, GPUPerformanceStateValueRange right)
- {
- return Equals(left, right) || left?.Equals(right) == true;
- }
-
- ///
- /// Checks two instances of for inequality.
- ///
- /// The left side of the comparison.
- /// The right side of the comparison.
- /// true if instances are in-equal, otherwise false
- public static bool operator !=(GPUPerformanceStateValueRange left, GPUPerformanceStateValueRange right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (obj == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- return Equals(obj as GPUPerformanceStateValueRange);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- return ((int) Maximum * 397) ^ (int) Minimum;
- }
- }
-
- ///
- public override string ToString()
- {
- if (Minimum == Maximum)
- {
- return $"({Minimum})";
- }
-
- return $"[({Minimum}) - ({Maximum})]";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPerformanceStateVoltage.cs b/app/NvAPIWrapper/GPU/GPUPerformanceStateVoltage.cs
deleted file mode 100644
index 97257b9c..00000000
--- a/app/NvAPIWrapper/GPU/GPUPerformanceStateVoltage.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents a performance state voltage settings
- ///
- public class GPUPerformanceStateVoltage
- {
- internal GPUPerformanceStateVoltage(IPerformanceStates20VoltageEntry states20BaseVoltageEntry)
- {
- VoltageDomain = states20BaseVoltageEntry.DomainId;
- IsReadOnly = !states20BaseVoltageEntry.IsEditable;
-
- CurrentVoltageInMicroVolt = states20BaseVoltageEntry.ValueInMicroVolt;
- VoltageDeltaInMicroVolt = states20BaseVoltageEntry.ValueDeltaInMicroVolt.DeltaValue;
- BaseVoltageInMicroVolt = (int) (CurrentVoltageInMicroVolt - VoltageDeltaInMicroVolt);
-
- VoltageDeltaRangeInMicroVolt = new GPUPerformanceStateValueRange(
- states20BaseVoltageEntry.ValueDeltaInMicroVolt.DeltaRange.Minimum,
- states20BaseVoltageEntry.ValueDeltaInMicroVolt.DeltaRange.Maximum
- );
- }
-
- ///
- /// Gets the base voltage in uV
- ///
- public int BaseVoltageInMicroVolt { get; }
-
- ///
- /// Gets the current voltage in uV
- ///
- public uint CurrentVoltageInMicroVolt { get; }
-
- ///
- /// Gets a boolean value indicating if this voltage is readonly
- ///
- public bool IsReadOnly { get; }
-
- ///
- /// Gets the voltage delta in uV
- ///
- public int VoltageDeltaInMicroVolt { get; }
-
- ///
- /// Gets the voltage delta range in uV
- ///
- public GPUPerformanceStateValueRange VoltageDeltaRangeInMicroVolt { get; }
-
- ///
- /// Gets the voltage domain
- ///
- public PerformanceVoltageDomain VoltageDomain { get; }
-
- ///
- public override string ToString()
- {
- var title = IsReadOnly ? $"{VoltageDomain} (ReadOnly)" : VoltageDomain.ToString();
-
- return
- $"{title}: ({BaseVoltageInMicroVolt}) + ({VoltageDeltaInMicroVolt}) = ({CurrentVoltageInMicroVolt})";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPerformanceStatesInfo.cs b/app/NvAPIWrapper/GPU/GPUPerformanceStatesInfo.cs
deleted file mode 100644
index 7c267895..00000000
--- a/app/NvAPIWrapper/GPU/GPUPerformanceStatesInfo.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds the retrieved performance states information
- ///
- public class GPUPerformanceStatesInformation
- {
- internal GPUPerformanceStatesInformation(
- IPerformanceStates20Info states20Info,
- PerformanceStateId currentPerformanceStateId,
- PrivatePCIeInfoV2? pciInformation)
- {
- IsReadOnly = !states20Info.IsEditable;
-
- GlobalVoltages = states20Info.GeneralVoltages
- .Select(entry => new GPUPerformanceStateVoltage(entry))
- .ToArray();
-
- var clocks = states20Info.Clocks;
- var baseVoltages = states20Info.Voltages;
-
- PerformanceStates = states20Info.PerformanceStates.Select((state20, i) =>
- {
- PCIeInformation statePCIeInfo = null;
-
- if (pciInformation != null && pciInformation.Value.PCIePerformanceStateInfos.Length > i)
- {
- statePCIeInfo = new PCIeInformation(pciInformation.Value.PCIePerformanceStateInfos[i]);
- }
-
- return new GPUPerformanceState(
- i,
- state20,
- clocks[state20.StateId],
- baseVoltages[state20.StateId],
- statePCIeInfo
- );
- }).ToArray();
-
- CurrentPerformanceState =
- PerformanceStates.FirstOrDefault(performanceState =>
- performanceState.StateId == currentPerformanceStateId);
- }
-
- ///
- /// Gets the currently active performance state
- ///
- public GPUPerformanceState CurrentPerformanceState { get; }
-
- ///
- /// Gets a list of global voltage settings
- ///
- public GPUPerformanceStateVoltage[] GlobalVoltages { get; }
-
- ///
- /// Gets a boolean value indicating if performance states are readonly
- ///
- public bool IsReadOnly { get; }
-
- ///
- /// Gets a list of all available performance states
- ///
- public GPUPerformanceState[] PerformanceStates { get; }
-
- ///
- public override string ToString()
- {
- if (PerformanceStates.Length == 0)
- {
- return "No Performance State Available";
- }
-
- return string.Join(
- ", ",
- PerformanceStates
- .Select(
- state =>
- {
- var attributes = new List();
-
- if (state.IsReadOnly)
- {
- attributes.Add("ReadOnly");
- }
-
- if (CurrentPerformanceState.StateId == state.StateId)
- {
- attributes.Add("Active");
- }
-
- if (attributes.Any())
- {
- return $"{state.StateId} ({string.Join(" - ", attributes)})";
- }
-
- return state.StateId.ToString();
- })
- );
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPowerLimitInfo.cs b/app/NvAPIWrapper/GPU/GPUPowerLimitInfo.cs
deleted file mode 100644
index 41a01730..00000000
--- a/app/NvAPIWrapper/GPU/GPUPowerLimitInfo.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information regarding a possible power limit policy and its acceptable range
- ///
- public class GPUPowerLimitInfo
- {
- internal GPUPowerLimitInfo(PrivatePowerPoliciesInfoV1.PowerPolicyInfoEntry powerPolicyInfoEntry)
- {
- PerformanceStateId = powerPolicyInfoEntry.PerformanceStateId;
- MinimumPowerInPCM = powerPolicyInfoEntry.MinimumPowerInPCM;
- DefaultPowerInPCM = powerPolicyInfoEntry.DefaultPowerInPCM;
- MaximumPowerInPCM = powerPolicyInfoEntry.MaximumPowerInPCM;
- }
-
- ///
- /// Gets the default policy target power in per cent mille (PCM)
- ///
- public uint DefaultPowerInPCM { get; }
-
- ///
- /// Gets the default policy target power in percentage
- ///
- public float DefaultPowerInPercent
- {
- get => DefaultPowerInPCM / 1000f;
- }
-
- ///
- /// Gets the maximum possible policy target power in per cent mille (PCM)
- ///
- public uint MaximumPowerInPCM { get; }
-
- ///
- /// Gets the maximum possible policy target power in percentage
- ///
- public float MaximumPowerInPercent
- {
- get => MaximumPowerInPCM / 1000f;
- }
-
- ///
- /// Gets the minimum possible policy target power in per cent mille (PCM)
- ///
- public uint MinimumPowerInPCM { get; }
-
- ///
- /// Gets the minimum possible policy target power in percentage
- ///
- public float MinimumPowerInPercent
- {
- get => MinimumPowerInPCM / 1000f;
- }
-
- ///
- /// Gets the corresponding performance state identification
- ///
- public PerformanceStateId PerformanceStateId { get; }
-
- ///
- public override string ToString()
- {
- return
- $"[{PerformanceStateId}] Default: {DefaultPowerInPercent}% - Range: ({MinimumPowerInPercent}% - {MaximumPowerInPercent}%)";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPowerLimitPolicy.cs b/app/NvAPIWrapper/GPU/GPUPowerLimitPolicy.cs
deleted file mode 100644
index 3b18cdd6..00000000
--- a/app/NvAPIWrapper/GPU/GPUPowerLimitPolicy.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information regarding a currently active power limit policy
- ///
- public class GPUPowerLimitPolicy
- {
- internal GPUPowerLimitPolicy(PrivatePowerPoliciesStatusV1.PowerPolicyStatusEntry powerPolicyStatusEntry)
- {
- PerformanceStateId = powerPolicyStatusEntry.PerformanceStateId;
- PowerTargetInPCM = powerPolicyStatusEntry.PowerTargetInPCM;
- }
-
- ///
- /// Gets the corresponding performance state identification
- ///
- public PerformanceStateId PerformanceStateId { get; }
-
- ///
- /// Gets the current policy target power in per cent mille (PCM)
- ///
- public uint PowerTargetInPCM { get; }
-
- ///
- /// Gets the current policy target power in percentage
- ///
- public float PowerTargetInPercent
- {
- get => PowerTargetInPCM / 1000f;
- }
-
- ///
- public override string ToString()
- {
- return $"{PerformanceStateId} Target: {PowerTargetInPercent}%";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPowerTopologyInformation.cs b/app/NvAPIWrapper/GPU/GPUPowerTopologyInformation.cs
deleted file mode 100644
index 9c613850..00000000
--- a/app/NvAPIWrapper/GPU/GPUPowerTopologyInformation.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using NvAPIWrapper.Native;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information regarding current power topology and their current power usage
- ///
- public class GPUPowerTopologyInformation
- {
- internal GPUPowerTopologyInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- /// Gets the current power topology entries
- ///
- public IEnumerable PowerTopologyEntries
- {
- get
- {
- return GPUApi.ClientPowerTopologyGetStatus(PhysicalGPU.Handle).PowerPolicyStatusEntries
- .Select(entry => new GPUPowerTopologyStatus(entry));
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUPowerTopologyStatus.cs b/app/NvAPIWrapper/GPU/GPUPowerTopologyStatus.cs
deleted file mode 100644
index 54849cad..00000000
--- a/app/NvAPIWrapper/GPU/GPUPowerTopologyStatus.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about a power domain usage
- ///
- public class GPUPowerTopologyStatus
- {
- internal GPUPowerTopologyStatus(
- PrivatePowerTopologiesStatusV1.PowerTopologiesStatusEntry powerTopologiesStatusEntry)
- {
- Domain = powerTopologiesStatusEntry.Domain;
- PowerUsageInPCM = powerTopologiesStatusEntry.PowerUsageInPCM;
- }
-
- ///
- /// Gets the power usage domain
- ///
- public PowerTopologyDomain Domain { get; }
-
- ///
- /// Gets the current power usage in per cent mille (PCM)
- ///
- public uint PowerUsageInPCM { get; }
-
- ///
- /// Gets the current power usage in percentage
- ///
- public float PowerUsageInPercent
- {
- get => PowerUsageInPCM / 1000f;
- }
-
- ///
- public override string ToString()
- {
- return $"[{Domain}] {PowerUsageInPercent}%";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUThermalInformation.cs b/app/NvAPIWrapper/GPU/GPUThermalInformation.cs
deleted file mode 100644
index ea20cb7f..00000000
--- a/app/NvAPIWrapper/GPU/GPUThermalInformation.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using NvAPIWrapper.Native;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information regarding the available thermal sensors and current thermal level of a GPU
- ///
- public class GPUThermalInformation
- {
- internal GPUThermalInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets the current thermal level of the GPU
- ///
- public int CurrentThermalLevel
- {
- get => (int) GPUApi.GetCurrentThermalLevel(PhysicalGPU.Handle);
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- /// Gets the list of available thermal sensors
- ///
- public IEnumerable ThermalSensors
- {
- get
- {
- return GPUApi.GetThermalSettings(PhysicalGPU.Handle).Sensors
- .Select((sensor, i) => new GPUThermalSensor(i, sensor));
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUThermalLimitInfo.cs b/app/NvAPIWrapper/GPU/GPUThermalLimitInfo.cs
deleted file mode 100644
index 510c80b4..00000000
--- a/app/NvAPIWrapper/GPU/GPUThermalLimitInfo.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information regarding a possible thermal limit policy and its acceptable range
- ///
- public class GPUThermalLimitInfo
- {
- internal GPUThermalLimitInfo(PrivateThermalPoliciesInfoV2.ThermalPoliciesInfoEntry policiesInfoEntry)
- {
- Controller = policiesInfoEntry.Controller;
- MinimumTemperature = policiesInfoEntry.MinimumTemperature;
- DefaultTemperature = policiesInfoEntry.DefaultTemperature;
- MaximumTemperature = policiesInfoEntry.MaximumTemperature;
- }
-
- ///
- /// Gets the policy's thermal controller
- ///
- public ThermalController Controller { get; }
-
- ///
- /// Gets the default policy target temperature in degree Celsius
- ///
- public int DefaultTemperature { get; }
-
-
- ///
- /// Gets the maximum possible policy target temperature in degree Celsius
- ///
- public int MaximumTemperature { get; }
-
- ///
- /// Gets the minimum possible policy target temperature in degree Celsius
- ///
- public int MinimumTemperature { get; }
-
- ///
- public override string ToString()
- {
- return
- $"[{Controller}] Default: {DefaultTemperature}°C - Range: ({MinimumTemperature}°C - {MaximumTemperature}°C)";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUThermalLimitPolicy.cs b/app/NvAPIWrapper/GPU/GPUThermalLimitPolicy.cs
deleted file mode 100644
index 9ad502c7..00000000
--- a/app/NvAPIWrapper/GPU/GPUThermalLimitPolicy.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information regarding a currently active temperature limit policy
- ///
- public class GPUThermalLimitPolicy
- {
- internal GPUThermalLimitPolicy(PrivateThermalPoliciesStatusV2.ThermalPoliciesStatusEntry thermalPoliciesEntry)
- {
- Controller = thermalPoliciesEntry.Controller;
- PerformanceStateId = thermalPoliciesEntry.PerformanceStateId;
- TargetTemperature = thermalPoliciesEntry.TargetTemperature;
- }
-
- ///
- /// Gets the policy's thermal controller
- ///
- public ThermalController Controller { get; }
-
- ///
- /// Gets the corresponding performance state identification
- ///
- public PerformanceStateId PerformanceStateId { get; }
-
- ///
- /// Gets the current policy target temperature in degree Celsius
- ///
- public int TargetTemperature { get; }
-
- ///
- public override string ToString()
- {
- return
- $"{PerformanceStateId} [{Controller}] Target: {TargetTemperature}°C";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUThermalSensor.cs b/app/NvAPIWrapper/GPU/GPUThermalSensor.cs
deleted file mode 100644
index a1a8c48c..00000000
--- a/app/NvAPIWrapper/GPU/GPUThermalSensor.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents a thermal sensor
- ///
- public class GPUThermalSensor : IThermalSensor
- {
- internal GPUThermalSensor(int sensorId, IThermalSensor thermalSensor)
- {
- SensorId = sensorId;
- Controller = thermalSensor.Controller;
- DefaultMinimumTemperature = thermalSensor.DefaultMinimumTemperature;
- DefaultMaximumTemperature = thermalSensor.DefaultMaximumTemperature;
- CurrentTemperature = thermalSensor.CurrentTemperature;
- Target = thermalSensor.Target;
- }
-
- ///
- /// Gets the sensor identification number or index
- ///
- public int SensorId { get; set; }
-
- ///
- public ThermalController Controller { get; }
-
- ///
- public int CurrentTemperature { get; }
-
- ///
- public int DefaultMaximumTemperature { get; }
-
- ///
- public int DefaultMinimumTemperature { get; }
-
- ///
- public ThermalSettingsTarget Target { get; }
-
- ///
- public override string ToString()
- {
- return
- $"[{Target} @ {Controller}] Current: {CurrentTemperature}°C - Default Range: [({DefaultMinimumTemperature}°C) , ({DefaultMaximumTemperature}°C)]";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUUsageDomainStatus.cs b/app/NvAPIWrapper/GPU/GPUUsageDomainStatus.cs
deleted file mode 100644
index 21d4c0f7..00000000
--- a/app/NvAPIWrapper/GPU/GPUUsageDomainStatus.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information about a utilization domain
- ///
- public class GPUUsageDomainStatus
- {
- internal GPUUsageDomainStatus(UtilizationDomain domain, IUtilizationDomainInfo utilizationDomainInfo)
- {
- Domain = domain;
- Percentage = (int) utilizationDomainInfo.Percentage;
- }
-
- ///
- /// Gets the utilization domain that this instance describes
- ///
- public UtilizationDomain Domain { get; }
-
- ///
- /// Gets the percentage of time where the domain is considered busy in the last 1 second interval.
- ///
- public int Percentage { get; }
-
- ///
- public override string ToString()
- {
- return $"[{Domain}] {Percentage}%";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/GPUUsageInformation.cs b/app/NvAPIWrapper/GPU/GPUUsageInformation.cs
deleted file mode 100644
index 1d6b687a..00000000
--- a/app/NvAPIWrapper/GPU/GPUUsageInformation.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Holds information about the GPU utilization domains
- ///
- public class GPUUsageInformation
- {
- internal GPUUsageInformation(PhysicalGPU physicalGPU)
- {
- PhysicalGPU = physicalGPU;
- }
-
- ///
- /// Gets the Bus interface (BUS) utilization
- ///
- public GPUUsageDomainStatus BusInterface
- {
- get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.BusInterface);
- }
-
- ///
- /// Gets the frame buffer (FB) utilization
- ///
- public GPUUsageDomainStatus FrameBuffer
- {
- get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.FrameBuffer);
- }
-
- ///
- /// Gets the graphic engine (GPU) utilization
- ///
- public GPUUsageDomainStatus GPU
- {
- get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.GPU);
- }
-
- ///
- /// Gets a boolean value indicating if the dynamic performance states is enabled
- ///
- public bool IsDynamicPerformanceStatesEnabled
- {
- get => GPUApi.GetDynamicPerformanceStatesInfoEx(PhysicalGPU.Handle).IsDynamicPerformanceStatesEnabled;
- }
-
- ///
- /// Gets the physical GPU that this instance describes
- ///
- public PhysicalGPU PhysicalGPU { get; }
-
- ///
- /// Gets all valid utilization domains and information
- ///
- public IEnumerable UtilizationDomainsStatus
- {
- get
- {
- try
- {
- var dynamicPerformanceStates = GPUApi.GetDynamicPerformanceStatesInfoEx(PhysicalGPU.Handle);
-
- if (dynamicPerformanceStates.IsDynamicPerformanceStatesEnabled)
- {
- return dynamicPerformanceStates.Domains
- .Select(pair => new GPUUsageDomainStatus(pair.Key, pair.Value));
- }
- }
- catch
- {
- // ignored
- }
-
- return GPUApi.GetUsages(PhysicalGPU.Handle).Domains
- .Select(pair => new GPUUsageDomainStatus(pair.Key, pair.Value));
- }
- }
-
-
- ///
- /// Gets the Video engine (VID) utilization
- ///
- public GPUUsageDomainStatus VideoEngine
- {
- get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.VideoEngine);
- }
-
- ///
- /// Enables dynamic performance states
- ///
- public void EnableDynamicPerformanceStates()
- {
- GPUApi.EnableDynamicPStates(PhysicalGPU.Handle);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/LogicalGPU.cs b/app/NvAPIWrapper/GPU/LogicalGPU.cs
deleted file mode 100644
index 6f156666..00000000
--- a/app/NvAPIWrapper/GPU/LogicalGPU.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-using System.Linq;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents a logical NVIDIA GPU
- ///
- public class LogicalGPU : IEquatable
- {
- ///
- /// Creates a new LogicalGPU
- ///
- /// Logical GPU handle
- public LogicalGPU(LogicalGPUHandle handle)
- {
- Handle = handle;
- }
-
- ///
- /// Gets a list of all corresponding physical GPUs
- ///
- public PhysicalGPU[] CorrespondingPhysicalGPUs
- {
- get
- {
- return GPUApi.GetPhysicalGPUsFromLogicalGPU(Handle).Select(handle => new PhysicalGPU(handle)).ToArray();
- }
- }
-
- ///
- /// Gets the logical GPU handle
- ///
- public LogicalGPUHandle Handle { get; }
-
- ///
- public bool Equals(LogicalGPU other)
- {
- if (ReferenceEquals(null, other))
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Handle.Equals(other.Handle);
- }
-
- ///
- /// Gets all logical GPUs
- ///
- /// An array of logical GPUs
- public static LogicalGPU[] GetLogicalGPUs()
- {
- return GPUApi.EnumLogicalGPUs().Select(handle => new LogicalGPU(handle)).ToArray();
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(LogicalGPU left, LogicalGPU right)
- {
- return right?.Equals(left) ?? ReferenceEquals(left, null);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(LogicalGPU left, LogicalGPU right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- if (obj.GetType() != GetType())
- {
- return false;
- }
-
- return Equals((LogicalGPU) obj);
- }
-
- ///
- public override int GetHashCode()
- {
- return Handle.GetHashCode();
- }
-
- ///
- public override string ToString()
- {
- return
- $"Logical GPU [{CorrespondingPhysicalGPUs.Length}] {{{string.Join(", ", CorrespondingPhysicalGPUs.Select(gpu => gpu.FullName).ToArray())}}}";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/PCIIdentifiers.cs b/app/NvAPIWrapper/GPU/PCIIdentifiers.cs
deleted file mode 100644
index 0076a861..00000000
--- a/app/NvAPIWrapper/GPU/PCIIdentifiers.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about the PCI connection
- ///
- public class PCIIdentifiers : IEquatable
- {
- // ReSharper disable once TooManyDependencies
- internal PCIIdentifiers(uint deviceId, uint subSystemId, uint revisionId, int externalDeviceId = 0)
- {
- DeviceId = deviceId;
- SubSystemId = subSystemId;
- RevisionId = revisionId;
-
- if (externalDeviceId > 0)
- {
- ExternalDeviceId = (ushort) externalDeviceId;
- }
- else
- {
- ExternalDeviceId = (ushort) (deviceId >> 16);
- }
-
- VendorId = (ushort) ((DeviceId << 16) >> 16);
- }
-
- ///
- /// Gets the internal PCI device identifier
- ///
- public uint DeviceId { get; }
-
- ///
- /// Gets the external PCI device identifier
- ///
- public ushort ExternalDeviceId { get; }
-
- ///
- /// Gets the internal PCI device-specific revision identifier
- ///
- public uint RevisionId { get; }
-
- ///
- /// Gets the internal PCI subsystem identifier
- ///
- public uint SubSystemId { get; }
-
- ///
- /// Gets the vendor identification calculated from internal device identification
- ///
- public ushort VendorId { get; }
-
- ///
- public bool Equals(PCIIdentifiers other)
- {
- return DeviceId == other.DeviceId &&
- SubSystemId == other.SubSystemId &&
- RevisionId == other.RevisionId;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(PCIIdentifiers left, PCIIdentifiers right)
- {
- return left.Equals(right);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(PCIIdentifiers left, PCIIdentifiers right)
- {
- return !left.Equals(right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- return obj is PCIIdentifiers identifiers && Equals(identifiers);
- }
-
- ///
- public override int GetHashCode()
- {
- unchecked
- {
- var hashCode = (int) DeviceId;
- hashCode = (hashCode * 397) ^ (int) SubSystemId;
- hashCode = (hashCode * 397) ^ (int) RevisionId;
-
- return hashCode;
- }
- }
-
- ///
- public override string ToString()
- {
- return $"PCI\\VEN_{VendorId:X}&DEV_{ExternalDeviceId:X}&SUBSYS_{SubSystemId:X}&REV_{RevisionId:X}";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/PCIeInformation.cs b/app/NvAPIWrapper/GPU/PCIeInformation.cs
deleted file mode 100644
index b5855776..00000000
--- a/app/NvAPIWrapper/GPU/PCIeInformation.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about the PCI-e connection
- ///
- public class PCIeInformation
- {
- internal PCIeInformation(PrivatePCIeInfoV2.PCIePerformanceStateInfo stateInfo)
- {
- TransferRateInMTps = stateInfo.TransferRateInMTps;
- Generation = stateInfo.Generation;
- Lanes = stateInfo.Lanes;
- Version = stateInfo.Version;
- }
-
- ///
- /// Gets the PCI-e generation
- ///
- public PCIeGeneration Generation { get; }
-
- ///
- /// Gets the PCI-e down stream lanes
- ///
- public uint Lanes { get; }
-
- ///
- /// Gets the PCIe transfer rate in Mega Transfers per Second
- ///
- public uint TransferRateInMTps { get; }
-
- ///
- /// Gets the PCI-e version
- ///
- public PCIeGeneration Version { get; }
-
- ///
- public override string ToString()
- {
- var v = "Unknown";
-
- switch (Version)
- {
- case PCIeGeneration.PCIe1:
- v = "PCIe 1.0";
-
- break;
- case PCIeGeneration.PCIe1Minor1:
- v = "PCIe 1.1";
-
- break;
- case PCIeGeneration.PCIe2:
- v = "PCIe 2.0";
-
- break;
- case PCIeGeneration.PCIe3:
- v = "PCIe 3.0";
-
- break;
- }
-
- return $"{v} x{Lanes} - {TransferRateInMTps} MTps";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/PhysicalGPU.cs b/app/NvAPIWrapper/GPU/PhysicalGPU.cs
deleted file mode 100644
index cb8f62a3..00000000
--- a/app/NvAPIWrapper/GPU/PhysicalGPU.cs
+++ /dev/null
@@ -1,559 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using NvAPIWrapper.Display;
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.Exceptions;
-using NvAPIWrapper.Native.General;
-using NvAPIWrapper.Native.GPU;
-using NvAPIWrapper.Native.GPU.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces.GPU;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Represents a physical NVIDIA GPU
- ///
- public class PhysicalGPU : IEquatable
- {
- ///
- /// Creates a new PhysicalGPU
- ///
- /// Physical GPU handle
- public PhysicalGPU(PhysicalGPUHandle handle)
- {
- Handle = handle;
- UsageInformation = new GPUUsageInformation(this);
- ThermalInformation = new GPUThermalInformation(this);
- BusInformation = new GPUBusInformation(this);
- ArchitectInformation = new GPUArchitectInformation(this);
- MemoryInformation = new GPUMemoryInformation(this);
- CoolerInformation = new GPUCoolerInformation(this);
- ECCMemoryInformation = new ECCMemoryInformation(this);
- PerformanceControl = new GPUPerformanceControl(this);
- PowerTopologyInformation = new GPUPowerTopologyInformation(this);
- }
-
- ///
- /// Gets all active outputs of this GPU
- ///
- public GPUOutput[] ActiveOutputs
- {
- get
- {
- var outputs = new List();
- var allOutputs = GPUApi.GetActiveOutputs(Handle);
-
- foreach (OutputId outputId in Enum.GetValues(typeof(OutputId)))
- {
- if (outputId != OutputId.Invalid && allOutputs.HasFlag(outputId))
- {
- outputs.Add(new GPUOutput(outputId, this));
- }
- }
-
- return outputs.ToArray();
- }
- }
-
- ///
- /// Gets GPU architect information
- ///
- public GPUArchitectInformation ArchitectInformation { get; }
-
- ///
- /// Gets GPU base clock frequencies
- ///
- public IClockFrequencies BaseClockFrequencies
- {
- get => GPUApi.GetAllClockFrequencies(Handle, new ClockFrequenciesV2(ClockType.BaseClock));
- }
-
- ///
- /// Gets GPU video BIOS information
- ///
- public VideoBIOS Bios
- {
- get => new VideoBIOS(
- GPUApi.GetVBIOSRevision(Handle),
- (int) GPUApi.GetVBIOSOEMRevision(Handle),
- GPUApi.GetVBIOSVersionString(Handle)
- );
- }
-
- ///
- /// Gets the board information
- ///
- public BoardInfo Board
- {
- get
- {
- try
- {
- return GPUApi.GetBoardInfo(Handle);
- }
- catch (NVIDIAApiException ex)
- {
- if (ex.Status == Status.NotSupported)
- {
- return default;
- }
-
- throw;
- }
- }
- }
-
- ///
- /// Gets GPU boost clock frequencies
- ///
- public IClockFrequencies BoostClockFrequencies
- {
- get => GPUApi.GetAllClockFrequencies(Handle, new ClockFrequenciesV2(ClockType.BoostClock));
- }
-
- ///
- /// Gets GPU bus information
- ///
- public GPUBusInformation BusInformation { get; }
-
- ///
- /// Gets GPU coolers information
- ///
- public GPUCoolerInformation CoolerInformation { get; }
-
- ///
- /// Gets corresponding logical GPU
- ///
- public LogicalGPU CorrespondingLogicalGPU
- {
- get => new LogicalGPU(GPUApi.GetLogicalGPUFromPhysicalGPU(Handle));
- }
-
- ///
- /// Gets GPU current clock frequencies
- ///
- public IClockFrequencies CurrentClockFrequencies
- {
- get => GPUApi.GetAllClockFrequencies(Handle, new ClockFrequenciesV2(ClockType.CurrentClock));
- }
-
- ///
- /// Gets the driver model number for this GPU
- ///
- public uint DriverModel
- {
- get => GPUApi.GetDriverModel(Handle);
- }
-
- ///
- /// Gets GPU ECC memory information
- ///
- public ECCMemoryInformation ECCMemoryInformation { get; }
-
- ///
- /// Gets the chipset foundry
- ///
- public GPUFoundry Foundry
- {
- get => GPUApi.GetFoundry(Handle);
- }
-
- ///
- /// Gets GPU full name
- ///
- public string FullName
- {
- get => GPUApi.GetFullName(Handle);
- }
-
- ///
- /// Gets the GPU identification number
- ///
- public uint GPUId
- {
- get => GPUApi.GetGPUIDFromPhysicalGPU(Handle);
- }
-
- ///
- /// Gets GPU type
- ///
- public GPUType GPUType
- {
- get => GPUApi.GetGPUType(Handle);
- }
-
- ///
- /// Gets the physical GPU handle
- ///
- public PhysicalGPUHandle Handle { get; }
-
- ///
- /// Gets a boolean value indicating the Quadro line of products
- ///
- public bool IsQuadro
- {
- get => GPUApi.GetQuadroStatus(Handle);
- }
-
- ///
- /// Gets GPU memory and RAM information as well as frame-buffer information
- ///
- public GPUMemoryInformation MemoryInformation { get; }
-
- ///
- /// Gets GPU performance control status and configurations
- ///
- public GPUPerformanceControl PerformanceControl { get; }
-
-
- ///
- /// Gets the GPU performance states information and configurations
- ///
- public GPUPerformanceStatesInformation PerformanceStatesInfo
- {
- get
- {
- var performanceStates20Info = GPUApi.GetPerformanceStates20(Handle);
- var currentPerformanceState = GPUApi.GetCurrentPerformanceState(Handle);
- PrivatePCIeInfoV2? pcieInformation = null;
-
- if (BusInformation.BusType == GPUBusType.PCIExpress)
- {
- try
- {
- pcieInformation = GPUApi.GetPCIEInfo(Handle);
- }
- catch
- {
- // ignore
- }
- }
-
- return new GPUPerformanceStatesInformation(performanceStates20Info, currentPerformanceState,
- pcieInformation);
- }
- }
-
- ///
- /// Gets GPU coolers information
- ///
- public GPUPowerTopologyInformation PowerTopologyInformation { get; }
-
- ///
- /// Gets GPU system type
- ///
- public SystemType SystemType
- {
- get => GPUApi.GetSystemType(Handle);
- }
-
- ///
- /// Gets GPU thermal sensors information
- ///
- public GPUThermalInformation ThermalInformation { get; }
-
- ///
- /// Gets the GPU utilization domains and usages
- ///
- public GPUUsageInformation UsageInformation { get; }
-
- ///
- public bool Equals(PhysicalGPU other)
- {
- if (other == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, other))
- {
- return true;
- }
-
- return Handle.Equals(other.Handle);
- }
-
- ///
- /// Gets the corresponding instance from a GPU identification number.
- ///
- /// The GPU identification number.
- /// An instance of or if operation failed.
- public static PhysicalGPU FromGPUId(uint gpuId)
- {
- var handle = GPUApi.GetPhysicalGPUFromGPUID(gpuId);
-
- if (handle.IsNull)
- {
- return null;
- }
-
- return new PhysicalGPU(handle);
- }
-
- ///
- /// Gets all physical GPUs
- ///
- /// An array of physical GPUs
- public static PhysicalGPU[] GetPhysicalGPUs()
- {
- return GPUApi.EnumPhysicalGPUs().Select(handle => new PhysicalGPU(handle)).ToArray();
- }
-
- ///
- /// Gets all physical GPUs in TCC state
- ///
- /// An array of physical GPUs
- public static PhysicalGPU[] GetTCCPhysicalGPUs()
- {
- return GPUApi.EnumTCCPhysicalGPUs().Select(handle => new PhysicalGPU(handle)).ToArray();
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(PhysicalGPU left, PhysicalGPU right)
- {
- return Equals(left, right) || left?.Equals(right) == true;
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(PhysicalGPU left, PhysicalGPU right)
- {
- return !(left == right);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (obj == null)
- {
- return false;
- }
-
- if (ReferenceEquals(this, obj))
- {
- return true;
- }
-
- return Equals(obj as PhysicalGPU);
- }
-
- ///
- public override int GetHashCode()
- {
- return Handle.GetHashCode();
- }
-
- ///
- public override string ToString()
- {
- return FullName;
- }
-
- ///
- /// Get a list of all active applications for this GPU
- ///
- /// An array of processes
- public Process[] GetActiveApplications()
- {
- return GPUApi.QueryActiveApps(Handle).Select(app => Process.GetProcessById(app.ProcessId)).ToArray();
- }
-
- ///
- /// Get a list of all connected display devices on this GPU
- ///
- /// ConnectedIdsFlag flag
- /// An array of display devices
- public DisplayDevice[] GetConnectedDisplayDevices(ConnectedIdsFlag flags)
- {
- return GPUApi.GetConnectedDisplayIds(Handle, flags).Select(display => new DisplayDevice(display)).ToArray();
- }
-
- ///
- /// Get the display device connected to a specific GPU output
- ///
- /// The GPU output to get connected display device for
- /// DisplayDevice connected to the specified GPU output
- public DisplayDevice GetDisplayDeviceByOutput(GPUOutput output)
- {
- return new DisplayDevice(GPUApi.GetDisplayIdFromGPUAndOutputId(Handle, output.OutputId));
- }
-
- ///
- /// Get a list of all display devices on any possible output
- ///
- /// An array of display devices
- public DisplayDevice[] GetDisplayDevices()
- {
- return GPUApi.GetAllDisplayIds(Handle).Select(display => new DisplayDevice(display)).ToArray();
- }
-
- ///
- /// Reads EDID data of an output
- ///
- /// The GPU output to read EDID information for
- /// A byte array containing EDID data
- public byte[] ReadEDIDData(GPUOutput output)
- {
- try
- {
- var data = new byte[0];
- var identification = 0;
- var totalSize = EDIDV3.MaxDataSize;
-
- for (var offset = 0; offset < totalSize; offset += EDIDV3.MaxDataSize)
- {
- var edid = GPUApi.GetEDID(Handle, output.OutputId, offset, identification);
- identification = edid.Identification;
- totalSize = edid.TotalSize;
-
- var edidData = edid.Data;
- Array.Resize(ref data, data.Length + edidData.Length);
- Array.Copy(edidData, 0, data, data.Length - edidData.Length, edidData.Length);
- }
-
- return data;
- }
- catch (NVIDIAApiException ex)
- {
- if (ex.Status == Status.IncompatibleStructureVersion)
- {
- return GPUApi.GetEDID(Handle, output.OutputId).Data;
- }
-
- throw;
- }
- }
-
- ///
- /// Reads data from the I2C bus
- ///
- /// Information required to read from the I2C bus.
- /// The returned payload.
- // ReSharper disable once InconsistentNaming
- public byte[] ReadI2C(II2CInfo i2cInfo)
- {
- GPUApi.I2CRead(Handle, ref i2cInfo);
-
- return i2cInfo.Data;
- }
-
- ///
- /// Validates a set of GPU outputs to check if they can be active simultaneously
- ///
- /// GPU outputs to check
- /// true if all specified outputs can be active simultaneously, otherwise false
- public bool ValidateOutputCombination(GPUOutput[] outputs)
- {
- var gpuOutpudIds =
- outputs.Aggregate(OutputId.Invalid, (current, gpuOutput) => current | gpuOutput.OutputId);
-
- return GPUApi.ValidateOutputCombination(Handle, gpuOutpudIds);
- }
-
- ///
- /// Writes EDID data of an output
- ///
- /// The GPU output to write EDID information for
- /// A byte array containing EDID data
- public void WriteEDIDData(GPUOutput output, byte[] edidData)
- {
- WriteEDIDData((uint) output.OutputId, edidData);
- }
-
- ///
- /// Writes EDID data of an display
- ///
- /// The display device to write EDID information for
- /// A byte array containing EDID data
- public void WriteEDIDData(DisplayDevice display, byte[] edidData)
- {
- WriteEDIDData(display.DisplayId, edidData);
- }
-
- ///
- /// Writes data to the I2C bus
- ///
- /// Information required to write to the I2C bus including data payload.
- // ReSharper disable once InconsistentNaming
- public void WriteI2C(II2CInfo i2cInfo)
- {
- GPUApi.I2CWrite(Handle, i2cInfo);
- }
-
- private void WriteEDIDData(uint displayOutputId, byte[] edidData)
- {
- try
- {
- if (edidData.Length == 0)
- {
- var instance = typeof(EDIDV3).Instantiate();
- GPUApi.SetEDID(Handle, displayOutputId, instance);
- }
-
- for (var offset = 0; offset < edidData.Length; offset += EDIDV3.MaxDataSize)
- {
- var array = new byte[Math.Min(EDIDV3.MaxDataSize, edidData.Length - offset)];
- Array.Copy(edidData, offset, array, 0, array.Length);
- var instance = EDIDV3.CreateWithData(0, (uint) offset, array, edidData.Length);
- GPUApi.SetEDID(Handle, displayOutputId, instance);
- }
-
- return;
- }
- catch (NVIDIAApiException ex)
- {
- if (ex.Status != Status.IncompatibleStructureVersion)
- {
- throw;
- }
- }
- catch (NVIDIANotSupportedException)
- {
- // ignore
- }
-
- try
- {
- if (edidData.Length == 0)
- {
- var instance = typeof(EDIDV2).Instantiate();
- GPUApi.SetEDID(Handle, displayOutputId, instance);
- }
-
- for (var offset = 0; offset < edidData.Length; offset += EDIDV2.MaxDataSize)
- {
- var array = new byte[Math.Min(EDIDV2.MaxDataSize, edidData.Length - offset)];
- Array.Copy(edidData, offset, array, 0, array.Length);
- GPUApi.SetEDID(Handle, displayOutputId, EDIDV2.CreateWithData(array, edidData.Length));
- }
-
- return;
- }
- catch (NVIDIAApiException ex)
- {
- if (ex.Status != Status.IncompatibleStructureVersion)
- {
- throw;
- }
- }
- catch (NVIDIANotSupportedException)
- {
- // ignore
- }
-
- GPUApi.SetEDID(Handle, displayOutputId, EDIDV1.CreateWithData(edidData));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/GPU/VideoBIOS.cs b/app/NvAPIWrapper/GPU/VideoBIOS.cs
deleted file mode 100644
index 72b522da..00000000
--- a/app/NvAPIWrapper/GPU/VideoBIOS.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.GPU
-{
- ///
- /// Contains information about the GPU Video BIOS
- ///
- public class VideoBIOS
- {
- internal VideoBIOS(uint revision, int oemRevision, string versionString)
- {
- Revision = revision;
- OEMRevision = oemRevision;
- VersionString = versionString.ToUpper();
- }
-
- ///
- /// Gets the the OEM revision of the video BIOS
- ///
- public int OEMRevision { get; }
-
- ///
- /// Gets the revision of the video BIOS
- ///
- public uint Revision { get; }
-
- ///
- /// Gets the full video BIOS version string
- ///
- public string VersionString { get; }
-
- ///
- public override string ToString()
- {
- return AsVersion().ToString();
- }
-
- ///
- /// Returns the video BIOS version as a .Net Version object
- ///
- /// A Version object representing the video BIOS version
- public Version AsVersion()
- {
- return new Version(
- (int) ((Revision >> 28) + ((Revision << 4) >> 28) * 16), // 8 bit little endian
- (int) (((Revision << 8) >> 28) + ((Revision << 12) >> 28) * 16), // 8 bit little endian
- (int) ((Revision << 16) >> 16), // 16 bit big endian
- OEMRevision // 8 bit integer
- );
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Icon.png b/app/NvAPIWrapper/Icon.png
deleted file mode 100644
index 43914ecd..00000000
Binary files a/app/NvAPIWrapper/Icon.png and /dev/null differ
diff --git a/app/NvAPIWrapper/NVIDIA.cs b/app/NvAPIWrapper/NVIDIA.cs
deleted file mode 100644
index 5fd58255..00000000
--- a/app/NvAPIWrapper/NVIDIA.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using NvAPIWrapper.Native;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Interfaces.General;
-
-namespace NvAPIWrapper
-{
- ///
- /// .Net friendly version of system and general functions of NVAPI library
- ///
- public static class NVIDIA
- {
- ///
- /// Gets information about the system's chipset.
- ///
- public static IChipsetInfo ChipsetInfo
- {
- get => GeneralApi.GetChipsetInfo();
- }
-
- ///
- /// Gets NVIDIA driver branch version as string
- ///
- public static string DriverBranchVersion
- {
- get
- {
- GeneralApi.GetDriverAndBranchVersion(out var branchVersion);
-
- return branchVersion;
- }
- }
-
- ///
- /// Gets NVIDIA driver version
- ///
- public static uint DriverVersion
- {
- get => GeneralApi.GetDriverAndBranchVersion(out _);
- }
-
- ///
- /// Gets NVAPI interface version as string
- ///
- public static string InterfaceVersionString
- {
- get => GeneralApi.GetInterfaceVersionString();
- }
-
- ///
- /// Gets the current lid and dock information.
- ///
- public static LidDockParameters LidAndDockParameters
- {
- get => GeneralApi.GetLidAndDockInfo();
- }
-
- ///
- /// Initializes the NvAPI library (if not already initialized) but always increments the ref-counter.
- ///
- public static void Initialize()
- {
- GeneralApi.Initialize();
- }
-
- ///
- /// PRIVATE - Requests to restart the display driver
- ///
- public static void RestartDisplayDriver()
- {
- GeneralApi.RestartDisplayDriver();
- }
-
- ///
- /// Decrements the ref-counter and when it reaches ZERO, unloads NVAPI library.
- ///
- public static void Unload()
- {
- GeneralApi.Unload();
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Attributes/AcceptsAttribute.cs b/app/NvAPIWrapper/Native/Attributes/AcceptsAttribute.cs
deleted file mode 100644
index 7df15fbb..00000000
--- a/app/NvAPIWrapper/Native/Attributes/AcceptsAttribute.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.Native.Attributes
-{
- [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Delegate)]
- internal class AcceptsAttribute : Attribute
- {
- public AcceptsAttribute(params Type[] types)
- {
- Types = types;
- }
-
- public Type[] Types { get; set; }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Attributes/FunctionIdAttribute.cs b/app/NvAPIWrapper/Native/Attributes/FunctionIdAttribute.cs
deleted file mode 100644
index 260da7d3..00000000
--- a/app/NvAPIWrapper/Native/Attributes/FunctionIdAttribute.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-using NvAPIWrapper.Native.Helpers;
-
-namespace NvAPIWrapper.Native.Attributes
-{
- [AttributeUsage(AttributeTargets.Delegate)]
- internal class FunctionIdAttribute : Attribute
- {
- public FunctionIdAttribute(FunctionId functionId)
- {
- FunctionId = functionId;
- }
-
- public FunctionId FunctionId { get; set; }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Attributes/StructureVersionAttribute.cs b/app/NvAPIWrapper/Native/Attributes/StructureVersionAttribute.cs
deleted file mode 100644
index 9752e65c..00000000
--- a/app/NvAPIWrapper/Native/Attributes/StructureVersionAttribute.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-namespace NvAPIWrapper.Native.Attributes
-{
- [AttributeUsage(AttributeTargets.Struct)]
- internal class StructureVersionAttribute : Attribute
- {
- public StructureVersionAttribute()
- {
- }
-
- public StructureVersionAttribute(int versionNumber)
- {
- VersionNumber = versionNumber;
- }
-
- public int VersionNumber { get; set; }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Constants/Display.cs b/app/NvAPIWrapper/Native/Constants/Display.cs
deleted file mode 100644
index c7a01b81..00000000
--- a/app/NvAPIWrapper/Native/Constants/Display.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace NvAPIWrapper.Native.Constants
-{
- internal static class Display
- {
- public const int AdvancedDisplayHeads = 4;
- public const int MaxDisplayHeads = 2;
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/Constants/General.cs b/app/NvAPIWrapper/Native/Constants/General.cs
deleted file mode 100644
index 20468c7e..00000000
--- a/app/NvAPIWrapper/Native/Constants/General.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace NvAPIWrapper.Native.Constants
-{
- internal static class General
- {
- public const int BinaryDataMax = 4096;
- public const int UnicodeStringLength = 2048;
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/DRSSettingLocation.cs b/app/NvAPIWrapper/Native/DRS/DRSSettingLocation.cs
deleted file mode 100644
index 27f9a24d..00000000
--- a/app/NvAPIWrapper/Native/DRS/DRSSettingLocation.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace NvAPIWrapper.Native.DRS
-{
- ///
- /// Holds possible values for the setting location
- ///
- public enum DRSSettingLocation : uint
- {
- ///
- /// Setting is part of the current profile
- ///
- CurrentProfile = 0,
-
- ///
- /// Setting is part of the global profile
- ///
- GlobalProfile,
-
- ///
- /// Setting is part of the base profile
- ///
- BaseProfile,
-
- ///
- /// Setting is part of the default profile
- ///
- DefaultProfile
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/DRSSettingType.cs b/app/NvAPIWrapper/Native/DRS/DRSSettingType.cs
deleted file mode 100644
index 4fc45d0b..00000000
--- a/app/NvAPIWrapper/Native/DRS/DRSSettingType.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace NvAPIWrapper.Native.DRS
-{
- ///
- /// Holds a list of possible setting value types
- ///
- public enum DRSSettingType : uint
- {
- ///
- /// Integer value type
- ///
- Integer = 0,
-
- ///
- /// Binary value type
- ///
- Binary,
-
- ///
- /// ASCII string value type
- ///
- String,
-
- ///
- /// Unicode string value type
- ///
- UnicodeString
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV1.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV1.cs
deleted file mode 100644
index 0371374e..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV1.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSApplicationV1 : IInitializable, IDRSApplication
- {
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- public DRSApplicationV1(
- string applicationName,
- string friendlyName = null,
- string launcherName = null
- )
- {
- this = typeof(DRSApplicationV1).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV2.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV2.cs
deleted file mode 100644
index ee3e8c32..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV2.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(2)]
- public struct DRSApplicationV2 : IInitializable, IDRSApplication
- {
- internal const char FileInFolderSeparator = ':';
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
- internal UnicodeString _FileInFolder;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- /// The list of files that are necessary to be present in the application parent directory.
- // ReSharper disable once TooManyDependencies
- public DRSApplicationV2(
- string applicationName,
- string friendlyName = null,
- string launcherName = null,
- string[] fileInFolders = null
- )
- {
- this = typeof(DRSApplicationV2).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- FilesInFolder = fileInFolders ?? new string[0];
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
-
- ///
- /// Gets the list of files that are necessary to be present in the application parent directory.
- ///
- public string[] FilesInFolder
- {
- get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
- new string[0];
- private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV3.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV3.cs
deleted file mode 100644
index 207649ea..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV3.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(3)]
- public struct DRSApplicationV3 : IInitializable, IDRSApplication
- {
- internal const char FileInFolderSeparator = DRSApplicationV2.FileInFolderSeparator;
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
- internal UnicodeString _FileInFolder;
- internal uint _Flags;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- /// The list of files that are necessary to be present in the application parent directory.
- /// A boolean value indicating if this application is a metro application.
- // ReSharper disable once TooManyDependencies
- public DRSApplicationV3(
- string applicationName,
- string friendlyName = null,
- string launcherName = null,
- string[] fileInFolders = null,
- bool isMetro = false
- )
- {
- this = typeof(DRSApplicationV3).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- FilesInFolder = fileInFolders ?? new string[0];
- IsMetroApplication = isMetro;
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- /// Gets a boolean value indicating if this application is a metro application
- ///
- public bool IsMetroApplication
- {
- get => _Flags.GetBit(0);
- private set => _Flags = _Flags.SetBit(0, value);
- }
-
- ///
- /// Gets a boolean value indicating if this application has command line arguments
- ///
- public bool HasCommandLine
- {
- get => _Flags.GetBit(1);
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
-
- ///
- /// Gets the list of files that are necessary to be present in the application parent directory.
- ///
- public string[] FilesInFolder
- {
- get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
- new string[0];
- private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV4.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV4.cs
deleted file mode 100644
index debc302e..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSApplicationV4.cs
+++ /dev/null
@@ -1,148 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-using NvAPIWrapper.Native.Interfaces.DRS;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(4)]
- public struct DRSApplicationV4 : IInitializable, IDRSApplication
- {
- internal const char FileInFolderSeparator = DRSApplicationV3.FileInFolderSeparator;
- internal StructureVersion _Version;
- internal uint _IsPredefined;
- internal UnicodeString _ApplicationName;
- internal UnicodeString _FriendlyName;
- internal UnicodeString _LauncherName;
- internal UnicodeString _FileInFolder;
- internal uint _Flags;
- internal UnicodeString _CommandLine;
-
- ///
- /// Creates a new instance of
- ///
- /// The application file name.
- /// The application friendly name.
- /// The application launcher name.
- /// The list of files that are necessary to be present in the application parent directory.
- /// A boolean value indicating if this application is a metro application.
- /// The application's command line arguments.
- // ReSharper disable once TooManyDependencies
- public DRSApplicationV4(
- string applicationName,
- string friendlyName = null,
- string launcherName = null,
- string[] fileInFolders = null,
- bool isMetro = false,
- string commandLine = null
- )
- {
- this = typeof(DRSApplicationV4).Instantiate();
- IsPredefined = false;
- ApplicationName = applicationName;
- FriendlyName = friendlyName ?? string.Empty;
- LauncherName = launcherName ?? string.Empty;
- FilesInFolder = fileInFolders ?? new string[0];
- IsMetroApplication = isMetro;
- ApplicationCommandLine = commandLine ?? string.Empty;
- }
-
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- private set => _IsPredefined = value ? 1u : 0u;
- }
-
- ///
- /// Gets a boolean value indicating if this application is a metro application
- ///
- public bool IsMetroApplication
- {
- get => _Flags.GetBit(0);
- private set => _Flags = _Flags.SetBit(0, value);
- }
-
- ///
- /// Gets a boolean value indicating if this application has command line arguments
- ///
- public bool HasCommandLine
- {
- get => _Flags.GetBit(1);
- private set => _Flags = _Flags.SetBit(1, value);
- }
-
- ///
- public string ApplicationName
- {
- get => _ApplicationName.Value;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new ArgumentException("Name can not be empty or null.");
- }
-
- _ApplicationName = new UnicodeString(value);
- }
- }
-
- ///
- /// Gets the application command line arguments
- ///
- public string ApplicationCommandLine
- {
- get => (HasCommandLine ? _CommandLine.Value : null) ?? string.Empty;
- private set
- {
- if (string.IsNullOrEmpty(value))
- {
- _CommandLine = new UnicodeString(null);
-
- if (HasCommandLine)
- {
- HasCommandLine = false;
- }
- }
- else
- {
- _CommandLine = new UnicodeString(value);
-
- if (!HasCommandLine)
- {
- HasCommandLine = true;
- }
- }
- }
- }
-
- ///
- public string FriendlyName
- {
- get => _FriendlyName.Value;
- private set => _FriendlyName = new UnicodeString(value);
- }
-
- ///
- public string LauncherName
- {
- get => _LauncherName.Value;
- private set => _LauncherName = new UnicodeString(value);
- }
-
- ///
- /// Gets the list of files that are necessary to be present in the application parent directory.
- ///
- public string[] FilesInFolder
- {
- get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
- new string[0];
- private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSGPUSupport.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSGPUSupport.cs
deleted file mode 100644
index d229eb86..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSGPUSupport.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Helpers;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Contains a list of supported GPU series by a NVIDIA driver setting profile
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- public struct DRSGPUSupport
- {
- internal uint _Flags;
-
- ///
- /// Gets or sets a value indicating if the GeForce line of products are supported
- ///
- public bool IsGeForceSupported
- {
- get => _Flags.GetBit(0);
- set => _Flags = _Flags.SetBit(0, value);
- }
-
- ///
- /// Gets or sets a value indicating if the Quadro line of products are supported
- ///
- public bool IsQuadroSupported
- {
- get => _Flags.GetBit(1);
- set => _Flags = _Flags.SetBit(1, value);
- }
-
- ///
- /// Gets or sets a value indicating if the NVS line of products are supported
- ///
- public bool IsNVSSupported
- {
- get => _Flags.GetBit(2);
- set => _Flags = _Flags.SetBit(2, value);
- }
-
- ///
- public override string ToString()
- {
- var supportedGPUs = new List();
-
- if (IsGeForceSupported)
- {
- supportedGPUs.Add("GeForce");
- }
-
- if (IsQuadroSupported)
- {
- supportedGPUs.Add("Quadro");
- }
-
- if (IsNVSSupported)
- {
- supportedGPUs.Add("NVS");
- }
-
- if (supportedGPUs.Any())
- {
- return $"[{_Flags}] = {string.Join(", ", supportedGPUs)}";
- }
-
- return $"[{_Flags}]";
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileHandle.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileHandle.cs
deleted file mode 100644
index 011b9f0f..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileHandle.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// DRSProfileHandle is a reference to a DRS profile.
- ///
- [StructLayout(LayoutKind.Sequential)]
- public struct DRSProfileHandle : IHandle, IEquatable
- {
- internal readonly IntPtr _MemoryAddress;
-
- private DRSProfileHandle(IntPtr memoryAddress)
- {
- _MemoryAddress = memoryAddress;
- }
-
- ///
- public bool Equals(DRSProfileHandle other)
- {
- return _MemoryAddress.Equals(other._MemoryAddress);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- return obj is DRSProfileHandle handle && Equals(handle);
- }
-
- ///
- public override int GetHashCode()
- {
- return _MemoryAddress.GetHashCode();
- }
-
-
- ///
- public override string ToString()
- {
- return $"DRSProfileHandle #{MemoryAddress.ToInt64()}";
- }
-
- ///
- public IntPtr MemoryAddress
- {
- get => _MemoryAddress;
- }
-
- ///
- public bool IsNull
- {
- get => _MemoryAddress == IntPtr.Zero;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(DRSProfileHandle left, DRSProfileHandle right)
- {
- return left.Equals(right);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(DRSProfileHandle left, DRSProfileHandle right)
- {
- return !left.Equals(right);
- }
-
- ///
- /// Gets default DRSProfileHandle with a null pointer
- ///
- public static DRSProfileHandle DefaultHandle
- {
- get => default(DRSProfileHandle);
- }
-
- ///
- /// Gets the default global profile handle
- ///
- public static DRSProfileHandle DefaultGlobalProfileHandle
- {
- get => new DRSProfileHandle(new IntPtr(-1));
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileV1.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileV1.cs
deleted file mode 100644
index 9b85af23..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSProfileV1.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Represents a NVIDIA driver settings profile
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSProfileV1 : IInitializable
- {
- internal StructureVersion _Version;
- internal UnicodeString _ProfileName;
- internal DRSGPUSupport _GPUSupport;
- internal uint _IsPredefined;
- internal uint _NumberOfApplications;
- internal uint _NumberOfSettings;
-
- ///
- /// Creates a new instance of with the passed name and GPU series support list.
- ///
- /// The name of the profile.
- /// An instance of containing the list of supported GPU series.
- public DRSProfileV1(string name, DRSGPUSupport gpuSupport)
- {
- this = typeof(DRSProfileV1).Instantiate();
- _ProfileName = new UnicodeString(name);
- _GPUSupport = gpuSupport;
- }
-
- ///
- /// Gets the name of the profile
- ///
- public string Name
- {
- get => _ProfileName.Value;
- }
-
- ///
- /// Gets or sets the GPU series support list
- ///
- public DRSGPUSupport GPUSupport
- {
- get => _GPUSupport;
- set => _GPUSupport = value;
- }
-
- ///
- /// Gets a boolean value indicating if this profile is predefined
- ///
- public bool IsPredefined
- {
- get => _IsPredefined > 0;
- }
-
- ///
- /// Gets the number of applications registered under this profile
- ///
- public int NumberOfApplications
- {
- get => (int) _NumberOfApplications;
- }
-
- ///
- /// Gets the number of setting registered under this profile
- ///
- public int NumberOfSettings
- {
- get => (int) _NumberOfSettings;
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSessionHandle.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSessionHandle.cs
deleted file mode 100644
index 8b4e570d..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSessionHandle.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// DRSSessionHandle is a reference to a DRS session.
- ///
- [StructLayout(LayoutKind.Sequential)]
- public struct DRSSessionHandle : IHandle, IEquatable
- {
- internal readonly IntPtr _MemoryAddress;
-
- ///
- public bool Equals(DRSSessionHandle other)
- {
- return _MemoryAddress.Equals(other._MemoryAddress);
- }
-
- ///
- public override bool Equals(object obj)
- {
- if (ReferenceEquals(null, obj))
- {
- return false;
- }
-
- return obj is DRSSessionHandle handle && Equals(handle);
- }
-
- ///
- public override int GetHashCode()
- {
- return _MemoryAddress.GetHashCode();
- }
-
-
- ///
- public override string ToString()
- {
- return $"DRSSessionHandle #{MemoryAddress.ToInt64()}";
- }
-
- ///
- public IntPtr MemoryAddress
- {
- get => _MemoryAddress;
- }
-
- ///
- public bool IsNull
- {
- get => _MemoryAddress == IntPtr.Zero;
- }
-
- ///
- /// Checks for equality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are equal, otherwise false
- public static bool operator ==(DRSSessionHandle left, DRSSessionHandle right)
- {
- return left.Equals(right);
- }
-
- ///
- /// Checks for inequality between two objects of same type
- ///
- /// The first object
- /// The second object
- /// true, if both objects are not equal, otherwise false
- public static bool operator !=(DRSSessionHandle left, DRSSessionHandle right)
- {
- return !left.Equals(right);
- }
-
- ///
- /// Gets default DRSSessionHandle with a null pointer
- ///
- public static DRSSessionHandle DefaultHandle
- {
- get => default(DRSSessionHandle);
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingV1.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingV1.cs
deleted file mode 100644
index 1c6e9161..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingV1.cs
+++ /dev/null
@@ -1,329 +0,0 @@
-using System;
-using System.Linq;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Helpers;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Represents a NVIDIA driver setting
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSSettingV1 : IInitializable
- {
- internal StructureVersion _Version;
- internal UnicodeString _SettingName;
- internal uint _SettingId;
- internal DRSSettingType _SettingType;
- internal DRSSettingLocation _SettingLocation;
- internal uint _IsCurrentPredefined;
- internal uint _IsPredefinedValid;
- internal DRSSettingValue _PredefinedValue;
- internal DRSSettingValue _CurrentValue;
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The type of the setting's value
- /// The setting's value
- public DRSSettingV1(uint id, DRSSettingType settingType, object value)
- {
- this = typeof(DRSSettingV1).Instantiate();
- Id = id;
- IsPredefinedValueValid = false;
- _SettingType = settingType;
- CurrentValue = value;
- }
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The setting's value
- public DRSSettingV1(uint id, string value) : this(id, DRSSettingType.String, value)
- {
- }
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The setting's value
- public DRSSettingV1(uint id, uint value) : this(id, DRSSettingType.Integer, value)
- {
- }
-
- ///
- /// Creates a new instance of containing the passed value.
- ///
- /// The setting identification number.
- /// The setting's value
- public DRSSettingV1(uint id, byte[] value) : this(id, DRSSettingType.Binary, value)
- {
- }
-
- ///
- /// Gets the name of the setting
- ///
- public string Name
- {
- get => _SettingName.Value;
- }
-
- ///
- /// Gets the identification number of the setting
- ///
- public uint Id
- {
- get => _SettingId;
- private set => _SettingId = value;
- }
-
- ///
- /// Gets the setting's value type
- ///
- public DRSSettingType SettingType
- {
- get => _SettingType;
- private set => _SettingType = value;
- }
-
- ///
- /// Gets the setting location
- ///
- public DRSSettingLocation SettingLocation
- {
- get => _SettingLocation;
- }
-
- ///
- /// Gets a boolean value indicating if the current value is the predefined value
- ///
- public bool IsCurrentValuePredefined
- {
- get => _IsCurrentPredefined > 0;
- private set => _IsCurrentPredefined = value ? 1u : 0u;
- }
-
- ///
- /// Gets a boolean value indicating if the predefined value is available and valid
- ///
- public bool IsPredefinedValueValid
- {
- get => _IsPredefinedValid > 0;
- private set => _IsPredefinedValid = value ? 1u : 0u;
- }
-
- ///
- /// Returns the predefined value as an integer
- ///
- /// An integer representing the predefined value
- public uint GetPredefinedValueAsInteger()
- {
- return _PredefinedValue.AsInteger();
- }
-
- ///
- /// Returns the predefined value as an array of bytes
- ///
- /// An byte array representing the predefined value
- public byte[] GetPredefinedValueAsBinary()
- {
- return _PredefinedValue.AsBinary();
- }
-
- ///
- /// Returns the predefined value as an unicode string
- ///
- /// An unicode string representing the predefined value
- public string GetPredefinedValueAsUnicodeString()
- {
- return _PredefinedValue.AsUnicodeString();
- }
-
- ///
- /// Gets the setting's predefined value
- ///
- public object PredefinedValue
- {
- get
- {
- if (!IsPredefinedValueValid)
- {
- return null;
- }
-
- switch (_SettingType)
- {
- case DRSSettingType.Integer:
-
- return GetPredefinedValueAsInteger();
- case DRSSettingType.Binary:
-
- return GetPredefinedValueAsBinary();
- case DRSSettingType.String:
- case DRSSettingType.UnicodeString:
-
- return GetPredefinedValueAsUnicodeString();
- default:
-
- throw new ArgumentOutOfRangeException(nameof(SettingType));
- }
- }
- }
-
- ///
- /// Returns the current value as an integer
- ///
- /// An integer representing the current value
- public uint GetCurrentValueAsInteger()
- {
- return _CurrentValue.AsInteger();
- }
-
- ///
- /// Returns the current value as an array of bytes
- ///
- /// An byte array representing the current value
- public byte[] GetCurrentValueAsBinary()
- {
- return _CurrentValue.AsBinary();
- }
-
- ///
- /// Returns the current value as an unicode string
- ///
- /// An unicode string representing the current value
- public string GetCurrentValueAsUnicodeString()
- {
- return _CurrentValue.AsUnicodeString();
- }
-
- ///
- /// Sets the passed value as the current value
- ///
- /// The new value for the setting
- public void SetCurrentValueAsInteger(uint value)
- {
- if (SettingType != DRSSettingType.Integer)
- {
- throw new ArgumentOutOfRangeException(nameof(value), "Passed argument is invalid for this setting.");
- }
-
- _CurrentValue = new DRSSettingValue(value);
- IsCurrentValuePredefined = IsPredefinedValueValid && (uint) CurrentValue == (uint) PredefinedValue;
- }
-
- ///
- /// Sets the passed value as the current value
- ///
- /// The new value for the setting
- public void SetCurrentValueAsBinary(byte[] value)
- {
- if (SettingType != DRSSettingType.Binary)
- {
- throw new ArgumentOutOfRangeException(nameof(value), "Passed argument is invalid for this setting.");
- }
-
- _CurrentValue = new DRSSettingValue(value);
- IsCurrentValuePredefined =
- IsPredefinedValueValid &&
- ((byte[]) CurrentValue)?.SequenceEqual((byte[]) PredefinedValue ?? new byte[0]) == true;
- }
-
- ///
- /// Sets the passed value as the current value
- ///
- /// The new value for the setting
- public void SetCurrentValueAsUnicodeString(string value)
- {
- if (SettingType != DRSSettingType.UnicodeString)
- {
- throw new ArgumentOutOfRangeException(nameof(value), "Passed argument is invalid for this setting.");
- }
-
- _CurrentValue = new DRSSettingValue(value);
- IsCurrentValuePredefined =
- IsPredefinedValueValid &&
- string.Equals(
- (string) CurrentValue,
- (string) PredefinedValue,
- StringComparison.InvariantCulture
- );
- }
-
- ///
- /// Gets or sets the setting's current value
- ///
- public object CurrentValue
- {
- get
- {
- switch (_SettingType)
- {
- case DRSSettingType.Integer:
-
- return GetCurrentValueAsInteger();
- case DRSSettingType.Binary:
-
- return GetCurrentValueAsBinary();
- case DRSSettingType.String:
- case DRSSettingType.UnicodeString:
-
- return GetCurrentValueAsUnicodeString();
- default:
-
- throw new ArgumentOutOfRangeException(nameof(SettingType));
- }
- }
- private set
- {
- if (value is int intValue)
- {
- SetCurrentValueAsInteger((uint) intValue);
- }
- else if (value is uint unsignedIntValue)
- {
- SetCurrentValueAsInteger(unsignedIntValue);
- }
- else if (value is short shortValue)
- {
- SetCurrentValueAsInteger((uint) shortValue);
- }
- else if (value is ushort unsignedShortValue)
- {
- SetCurrentValueAsInteger(unsignedShortValue);
- }
- else if (value is long longValue)
- {
- SetCurrentValueAsInteger((uint) longValue);
- }
- else if (value is ulong unsignedLongValue)
- {
- SetCurrentValueAsInteger((uint) unsignedLongValue);
- }
- else if (value is byte byteValue)
- {
- SetCurrentValueAsInteger(byteValue);
- }
- else if (value is string stringValue)
- {
- SetCurrentValueAsUnicodeString(stringValue);
- }
- else if (value is byte[] binaryValue)
- {
- SetCurrentValueAsBinary(binaryValue);
- }
- else
- {
- throw new ArgumentException("Unacceptable argument type.", nameof(value));
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValue.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValue.cs
deleted file mode 100644
index c57a59af..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValue.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Text;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Represents a setting value
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- public struct DRSSettingValue : IInitializable
- {
- private const int UnicodeStringLength = UnicodeString.UnicodeStringLength;
- private const int BinaryDataMax = 4096;
-
- // Math.Max(BinaryDataMax + sizeof(uint), UnicodeStringLength * sizeof(ushort))
- private const int FullStructureSize = 4100;
-
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = FullStructureSize, ArraySubType = UnmanagedType.U1)]
- internal byte[] _BinaryValue;
-
- ///
- /// Creates a new instance of containing the passed unicode string as the value
- ///
- /// The unicode string value
- public DRSSettingValue(string value)
- {
- if (value?.Length > UnicodeStringLength)
- {
- value = value.Substring(0, UnicodeStringLength);
- }
-
- _BinaryValue = new byte[FullStructureSize];
-
- var stringBytes = Encoding.Unicode.GetBytes(value ?? string.Empty);
- Array.Copy(stringBytes, 0, _BinaryValue, 0, Math.Min(stringBytes.Length, _BinaryValue.Length));
- }
-
- ///
- /// Creates a new instance of containing the passed byte array as the value
- ///
- /// The byte array value
- public DRSSettingValue(byte[] value)
- {
- _BinaryValue = new byte[FullStructureSize];
-
- if (value?.Length > 0)
- {
- var arrayLength = Math.Min(value.Length, BinaryDataMax);
- var arrayLengthBytes = BitConverter.GetBytes((uint) arrayLength);
- Array.Copy(arrayLengthBytes, 0, _BinaryValue, 0, arrayLengthBytes.Length);
- Array.Copy(value, 0, _BinaryValue, arrayLengthBytes.Length, arrayLength);
- }
- }
-
- ///
- /// Creates a new instance of containing the passed integer as the value
- ///
- /// The integer value
- public DRSSettingValue(uint value)
- {
- _BinaryValue = new byte[FullStructureSize];
- var arrayLengthBytes = BitConverter.GetBytes(value);
- Array.Copy(arrayLengthBytes, 0, _BinaryValue, 0, arrayLengthBytes.Length);
- }
-
- ///
- /// Returns the value as an integer
- ///
- /// An integer representing the value
- public uint AsInteger()
- {
- return BitConverter.ToUInt32(_BinaryValue, 0);
- }
-
- ///
- /// Returns the value as an array of bytes
- ///
- /// An array of bytes representing the value
- public byte[] AsBinary()
- {
- return _BinaryValue.Skip(sizeof(uint)).Take((int) AsInteger()).ToArray();
- }
-
- ///
- /// Returns the value as an unicode string
- ///
- /// An unicode string representing the value
- public string AsUnicodeString()
- {
- return Encoding.Unicode.GetString(_BinaryValue).TrimEnd('\0');
- }
- }
-}
\ No newline at end of file
diff --git a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValues.cs b/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValues.cs
deleted file mode 100644
index 61dd84a2..00000000
--- a/app/NvAPIWrapper/Native/DRS/Structures/DRSSettingValues.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-using System;
-using System.Linq;
-using System.Runtime.InteropServices;
-using NvAPIWrapper.Native.Attributes;
-using NvAPIWrapper.Native.General.Structures;
-using NvAPIWrapper.Native.Interfaces;
-
-namespace NvAPIWrapper.Native.DRS.Structures
-{
- ///
- /// Contains a list of all possible values for a setting as well as its default value
- ///
- [StructLayout(LayoutKind.Sequential, Pack = 8)]
- [StructureVersion(1)]
- public struct DRSSettingValues : IInitializable
- {
- internal const int MaximumNumberOfValues = 100;
- internal StructureVersion _Version;
- internal uint _NumberOfValues;
- internal DRSSettingType _SettingType;
- internal DRSSettingValue _DefaultValue;
-
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = MaximumNumberOfValues)]
- internal DRSSettingValue[] _Values;
-
- ///
- /// Gets the setting's value type
- ///
- public DRSSettingType SettingType
- {
- get => _SettingType;
- }
-
- ///
- /// Gets a list of possible values for the setting
- ///
- public object[] Values
- {
- get
- {
- switch (_SettingType)
- {
- case DRSSettingType.Integer:
-
- return ValuesAsInteger().Cast