mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Cleanup
This commit is contained in:
26
app/Fans.cs
26
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();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
<PackageReference Include="hidlibrary" Version="3.3.40" />
|
||||
<PackageReference Include="HidSharpCore" Version="1.2.1.1" />
|
||||
<PackageReference Include="NAudio" Version="2.1.0" />
|
||||
<PackageReference Include="NvAPIWrapper.Net" Version="0.8.1.101" />
|
||||
<PackageReference Include="System.Management" Version="7.0.1" />
|
||||
<PackageReference Include="TaskScheduler" Version="2.10.1" />
|
||||
<PackageReference Include="WinForms.DataVisualization" Version="1.8.0" />
|
||||
|
||||
@@ -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
|
||||
|
||||
373
app/Mode/ModeControl.cs
Normal file
373
app/Mode/ModeControl.cs
Normal file
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
using System;
|
||||
using NvAPIWrapper.Native.Display;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
using NvAPIWrapper.Native.Interfaces.Display;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <inheritdoc cref="IColorData" />
|
||||
public class ColorData : IColorData, IEquatable<ColorData>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an instance of <see cref="ColorData" /> to modify the color data
|
||||
/// </summary>
|
||||
/// <param name="colorFormat">The color data color format.</param>
|
||||
/// <param name="colorimetry">The color data color space.</param>
|
||||
/// <param name="dynamicRange">The color data dynamic range.</param>
|
||||
/// <param name="colorDepth">The color data color depth.</param>
|
||||
/// <param name="colorSelectionPolicy">The color data selection policy.</param>
|
||||
/// <param name="desktopColorDepth">The color data desktop color depth.</param>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataDepth? ColorDepth { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataFormat ColorFormat { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataColorimetry Colorimetry { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataDesktopDepth? DesktopColorDepth { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataDynamicRange? DynamicRange { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataSelectionPolicy? SelectionPolicy { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instances of <see cref="ColorData" /> for equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns>true if two instances are equal; otherwise false.</returns>
|
||||
public static bool operator ==(ColorData left, ColorData right)
|
||||
{
|
||||
return left?.Equals(right) == true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instances of <see cref="ColorData" /> for inequality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns>true if two instances are not equal; otherwise false.</returns>
|
||||
public static bool operator !=(ColorData left, ColorData right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,245 +0,0 @@
|
||||
using System;
|
||||
using NvAPIWrapper.Native.Display;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Hold information about a custom display resolution
|
||||
/// </summary>
|
||||
public class CustomResolution : IEquatable<CustomResolution>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an instance of <see cref="CustomResolution" />.
|
||||
/// </summary>
|
||||
/// <param name="width">The screen width.</param>
|
||||
/// <param name="height">The screen height.</param>
|
||||
/// <param name="colorFormat">The color format.</param>
|
||||
/// <param name="timing">The resolution timing.</param>
|
||||
/// <param name="xRatio">The horizontal scaling ratio.</param>
|
||||
/// <param name="yRatio">The vertical scaling ratio.</param>
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an instance of <see cref="CustomResolution" />.
|
||||
/// </summary>
|
||||
/// <param name="width">The screen width.</param>
|
||||
/// <param name="height">The screen height.</param>
|
||||
/// <param name="colorDepth">The color depth.</param>
|
||||
/// <param name="timing">The resolution timing.</param>
|
||||
/// <param name="xRatio">The horizontal scaling ratio.</param>
|
||||
/// <param name="yRatio">The vertical scaling ratio.</param>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the source surface color depth. "0" means all 8/16/32bpp.
|
||||
/// </summary>
|
||||
public uint ColorDepth { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the color format (optional)
|
||||
/// </summary>
|
||||
public ColorFormat ColorFormat { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the source surface (source mode) height.
|
||||
/// </summary>
|
||||
public uint Height { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the timing used to program TMDS/DAC/LVDS/HDMI/TVEncoder, etc.
|
||||
/// </summary>
|
||||
public Timing Timing { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the source surface (source mode) width.
|
||||
/// </summary>
|
||||
public uint Width { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the horizontal scaling ratio.
|
||||
/// </summary>
|
||||
public float XRatio { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the vertical scaling ratio.
|
||||
/// </summary>
|
||||
public float YRatio { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="CustomResolution" /> for equality.
|
||||
/// </summary>
|
||||
/// <param name="left">An first instance of <see cref="CustomResolution" /> to compare.</param>
|
||||
/// <param name="right">An Second instance of <see cref="CustomResolution" /> to compare.</param>
|
||||
/// <returns>True if both instances are equal, otherwise false.</returns>
|
||||
public static bool operator ==(CustomResolution left, CustomResolution right)
|
||||
{
|
||||
return Equals(left, right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="CustomResolution" /> for inequality.
|
||||
/// </summary>
|
||||
/// <param name="left">An first instance of <see cref="CustomResolution" /> to compare.</param>
|
||||
/// <param name="right">An Second instance of <see cref="CustomResolution" /> to compare.</param>
|
||||
/// <returns>True if both instances are not equal, otherwise false.</returns>
|
||||
public static bool operator !=(CustomResolution left, CustomResolution right)
|
||||
{
|
||||
return !Equals(left, right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// This class contains and provides a way to modify the Digital Vibrance Control information regarding the
|
||||
/// saturation level of the display or the output
|
||||
/// </summary>
|
||||
public class DVCInformation : IDisplayDVCInfo
|
||||
{
|
||||
private readonly DisplayHandle _displayHandle = DisplayHandle.DefaultHandle;
|
||||
private readonly OutputId _outputId = OutputId.Invalid;
|
||||
private bool? _isLegacy;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of the class using a DisplayHandle
|
||||
/// </summary>
|
||||
/// <param name="displayHandle">The handle of the display.</param>
|
||||
public DVCInformation(DisplayHandle displayHandle)
|
||||
{
|
||||
_displayHandle = displayHandle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of this class using a OutputId
|
||||
/// </summary>
|
||||
/// <param name="outputId">The output identification of a display or an output</param>
|
||||
public DVCInformation(OutputId outputId)
|
||||
{
|
||||
_outputId = outputId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets and sets the current saturation level
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public int DefaultLevel
|
||||
{
|
||||
get => GetInfo()?.DefaultLevel ?? 0;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public int MaximumLevel
|
||||
{
|
||||
get => GetInfo()?.MaximumLevel ?? 0;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public int MinimumLevel
|
||||
{
|
||||
get => GetInfo()?.MinimumLevel ?? 0;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an attached display
|
||||
/// </summary>
|
||||
public class Display : IEquatable<Display>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new Display
|
||||
/// </summary>
|
||||
/// <param name="handle">Handle of the display device</param>
|
||||
public Display(DisplayHandle handle)
|
||||
{
|
||||
Handle = handle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new Display
|
||||
/// </summary>
|
||||
/// <param name="displayName">Name of the display device</param>
|
||||
public Display(string displayName)
|
||||
{
|
||||
Handle = DisplayApi.GetAssociatedNvidiaDisplayHandle(displayName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding Digital Vibrance Control information
|
||||
/// </summary>
|
||||
public DVCInformation DigitalVibranceControl
|
||||
{
|
||||
get => new DVCInformation(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets corresponding DisplayDevice based on display name
|
||||
/// </summary>
|
||||
public DisplayDevice DisplayDevice
|
||||
{
|
||||
get => new DisplayDevice(Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets display driver build title
|
||||
/// </summary>
|
||||
public string DriverBuildTitle
|
||||
{
|
||||
get => DisplayApi.GetDisplayDriverBuildTitle(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets display handle
|
||||
/// </summary>
|
||||
public DisplayHandle Handle { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the display HDMI support information
|
||||
/// </summary>
|
||||
public IHDMISupportInfo HDMISupportInfo
|
||||
{
|
||||
get
|
||||
{
|
||||
var outputId = OutputId.Invalid;
|
||||
try
|
||||
{
|
||||
outputId = DisplayApi.GetAssociatedDisplayOutputId(Handle);
|
||||
}
|
||||
catch (NVIDIAApiException)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
return DisplayApi.GetHDMISupportInfo(Handle, outputId);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding HUE information
|
||||
/// </summary>
|
||||
public HUEInformation HUEControl
|
||||
{
|
||||
get => new HUEInformation(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the driving logical GPU
|
||||
/// </summary>
|
||||
public LogicalGPU LogicalGPU
|
||||
{
|
||||
get => new LogicalGPU(GPUApi.GetLogicalGPUFromDisplay(Handle));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets display name
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get => DisplayApi.GetAssociatedNvidiaDisplayName(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the connected GPU output
|
||||
/// </summary>
|
||||
public GPUOutput Output
|
||||
{
|
||||
get => new GPUOutput(DisplayApi.GetAssociatedDisplayOutputId(Handle), PhysicalGPUs.FirstOrDefault());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of all physical GPUs responsible for this display, with the first GPU returned as the one with the
|
||||
/// attached active output.
|
||||
/// </summary>
|
||||
public PhysicalGPU[] PhysicalGPUs
|
||||
{
|
||||
get => GPUApi.GetPhysicalGPUsFromDisplay(Handle).Select(handle => new PhysicalGPU(handle)).ToArray();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(Display other)
|
||||
{
|
||||
if (ReferenceEquals(null, other))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, other))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Handle.Equals(other.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This function returns all NVIDIA displays
|
||||
/// Note: Display handles can get invalidated on a modeset.
|
||||
/// </summary>
|
||||
/// <returns>An array of Display objects</returns>
|
||||
public static Display[] GetDisplays()
|
||||
{
|
||||
return DisplayApi.EnumNvidiaDisplayHandle().Select(handle => new Display(handle)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(Display left, Display right)
|
||||
{
|
||||
return right?.Equals(left) ?? ReferenceEquals(left, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(Display left, Display right)
|
||||
{
|
||||
return !(right == left);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Handle.GetHashCode();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all the supported NVIDIA display views (nView and Dualview modes) for this display.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public TargetViewMode[] GetSupportedViews()
|
||||
{
|
||||
return DisplayApi.GetSupportedViews(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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).
|
||||
/// </summary>
|
||||
/// <param name="refreshRate">The refresh rate to be applied.</param>
|
||||
/// <param name="isDeferred">
|
||||
/// A boolean value indicating if the refresh rate override should be deferred to the next OS
|
||||
/// mode-set.
|
||||
/// </param>
|
||||
public void OverrideRefreshRate(float refreshRate, bool isDeferred = false)
|
||||
{
|
||||
DisplayApi.SetRefreshRateOverride(Handle, refreshRate, isDeferred);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an NVIDIA display device
|
||||
/// </summary>
|
||||
public class DisplayDevice : IEquatable<DisplayDevice>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new DisplayDevice
|
||||
/// </summary>
|
||||
/// <param name="displayId">Display identification of the device</param>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new DisplayDevice
|
||||
/// </summary>
|
||||
/// <param name="displayIds">Display identification and attributes of the display device</param>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new DisplayDevice
|
||||
/// </summary>
|
||||
/// <param name="displayName">Display name of the display device</param>
|
||||
public DisplayDevice(string displayName) : this(DisplayApi.GetDisplayIdByDisplayName(displayName))
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the display device connection type
|
||||
/// </summary>
|
||||
public MonitorConnectionType ConnectionType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current display color data
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current display device timing
|
||||
/// </summary>
|
||||
public Timing CurrentTiming
|
||||
{
|
||||
get => DisplayApi.GetTiming(DisplayId, new TimingInput(TimingOverride.Current));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default display color data
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the NVIDIA display identification
|
||||
/// </summary>
|
||||
public uint DisplayId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the monitor Display port capabilities
|
||||
/// </summary>
|
||||
public MonitorColorData[] DisplayPortColorCapabilities
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ConnectionType != MonitorConnectionType.DisplayPort)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return DisplayApi.GetMonitorColorCapabilities(DisplayId);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the display driver EDID specified HDR capabilities
|
||||
/// </summary>
|
||||
public HDRCapabilitiesV1 DriverHDRCapabilities
|
||||
{
|
||||
get => DisplayApi.GetHDRCapabilities(DisplayId, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the display currently effective HDR capabilities
|
||||
/// </summary>
|
||||
public HDRCapabilitiesV1 EffectiveHDRCapabilities
|
||||
{
|
||||
get => DisplayApi.GetHDRCapabilities(DisplayId, false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI audio info-frame current information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI audio info-frame default information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI audio info-frame override information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI audio info-frame property information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the device HDMI support information
|
||||
/// </summary>
|
||||
public IHDMISupportInfo HDMISupportInfo
|
||||
{
|
||||
get => DisplayApi.GetHDMISupportInfo(DisplayId);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI auxiliary video info-frame current information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI auxiliary video info-frame default information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI auxiliary video info-frame override information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDMI auxiliary video info-frame property information
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HDR color data, or null if the HDR is disabled or unavailable
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display is being actively driven
|
||||
/// </summary>
|
||||
public bool IsActive { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display device is currently available
|
||||
/// </summary>
|
||||
public bool IsAvailable { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display is the representative display
|
||||
/// </summary>
|
||||
public bool IsCluster { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display is connected
|
||||
/// </summary>
|
||||
public bool IsConnected { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display is part of MST topology and it's a dynamic
|
||||
/// </summary>
|
||||
public bool IsDynamic { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
public bool IsMultiStreamRootNode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display is reported to the OS
|
||||
/// </summary>
|
||||
public bool IsOSVisible { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display is a physically connected display; Valid only when IsConnected is true
|
||||
/// </summary>
|
||||
public bool IsPhysicallyConnected { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if the display is wireless
|
||||
/// </summary>
|
||||
public bool IsWFD { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the connected GPU output
|
||||
/// </summary>
|
||||
public GPUOutput Output
|
||||
{
|
||||
get
|
||||
{
|
||||
PhysicalGPUHandle handle;
|
||||
var outputId = GPUApi.GetGPUAndOutputIdFromDisplayId(DisplayId, out handle);
|
||||
|
||||
return new GPUOutput(outputId, new PhysicalGPU(handle));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the connected physical GPU
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
var gpuHandle = GPUApi.GetPhysicalGPUFromDisplayId(DisplayId);
|
||||
|
||||
return new PhysicalGPU(gpuHandle);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
|
||||
return Output.PhysicalGPU;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets information regarding the scan-out settings of this display device
|
||||
/// </summary>
|
||||
public ScanOutInformation ScanOutInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets monitor capabilities from the Video Capability Data Block if available, otherwise null
|
||||
/// </summary>
|
||||
public MonitorVCDBCapabilities? VCDBMonitorCapabilities
|
||||
{
|
||||
get => DisplayApi.GetMonitorCapabilities(DisplayId, MonitorCapabilitiesType.VCDB)?.VCDBCapabilities;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets monitor capabilities from the Vendor Specific Data Block if available, otherwise null
|
||||
/// </summary>
|
||||
public MonitorVSDBCapabilities? VSDBMonitorCapabilities
|
||||
{
|
||||
get => DisplayApi.GetMonitorCapabilities(DisplayId, MonitorCapabilitiesType.VSDB)?.VSDBCapabilities;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(DisplayDevice other)
|
||||
{
|
||||
if (ReferenceEquals(null, other))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, other))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return DisplayId == other.DisplayId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deletes a custom resolution.
|
||||
/// </summary>
|
||||
/// <param name="customResolution">The custom resolution to delete.</param>
|
||||
/// <param name="displayIds">A list of display ids to remove the custom resolution from.</param>
|
||||
public static void DeleteCustomResolution(CustomResolution customResolution, uint[] displayIds)
|
||||
{
|
||||
var customDisplay = customResolution.AsCustomDisplay(false);
|
||||
DisplayApi.DeleteCustomDisplay(displayIds, customDisplay);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns an instance of <see cref="DisplayDevice" /> representing the primary GDI display device.
|
||||
/// </summary>
|
||||
/// <returns>An instance of <see cref="DisplayDevice" />.</returns>
|
||||
public static DisplayDevice GetGDIPrimaryDisplayDevice()
|
||||
{
|
||||
var displayId = DisplayApi.GetGDIPrimaryDisplayId();
|
||||
|
||||
if (displayId == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new DisplayDevice(displayId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(DisplayDevice left, DisplayDevice right)
|
||||
{
|
||||
return right?.Equals(left) ?? ReferenceEquals(left, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(DisplayDevice left, DisplayDevice right)
|
||||
{
|
||||
return !(right == left);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reverts the custom resolution currently on trial.
|
||||
/// </summary>
|
||||
/// <param name="displayIds">A list of display ids to revert the custom resolution from.</param>
|
||||
public static void RevertCustomResolution(uint[] displayIds)
|
||||
{
|
||||
DisplayApi.RevertCustomDisplayTrial(displayIds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the custom resolution currently on trial.
|
||||
/// </summary>
|
||||
/// <param name="displayIds">A list of display ids to save the custom resolution for.</param>
|
||||
/// <param name="isThisOutputIdOnly">
|
||||
/// If set, the saved custom display will only be applied on the monitor with the same
|
||||
/// outputId.
|
||||
/// </param>
|
||||
/// <param name="isThisMonitorOnly">
|
||||
/// 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.
|
||||
/// </param>
|
||||
public static void SaveCustomResolution(uint[] displayIds, bool isThisOutputIdOnly, bool isThisMonitorOnly)
|
||||
{
|
||||
DisplayApi.SaveCustomDisplay(displayIds, isThisOutputIdOnly, isThisMonitorOnly);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Applies a custom resolution into trial
|
||||
/// </summary>
|
||||
/// <param name="customResolution">The custom resolution to apply.</param>
|
||||
/// <param name="displayIds">A list of display ids to apply the custom resolution on.</param>
|
||||
/// <param name="hardwareModeSetOnly">
|
||||
/// A boolean value indicating that a hardware mode-set without OS update should be
|
||||
/// performed.
|
||||
/// </param>
|
||||
public static void TrialCustomResolution(
|
||||
CustomResolution customResolution,
|
||||
uint[] displayIds,
|
||||
bool hardwareModeSetOnly = true)
|
||||
{
|
||||
var customDisplay = customResolution.AsCustomDisplay(hardwareModeSetOnly);
|
||||
DisplayApi.TryCustomDisplay(displayIds.ToDictionary(u => u, u => customDisplay));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return (int) DisplayId;
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Display #{DisplayId}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calculates a valid timing based on the argument passed
|
||||
/// </summary>
|
||||
/// <param name="width">The preferred width.</param>
|
||||
/// <param name="height">The preferred height.</param>
|
||||
/// <param name="refreshRate">The preferred refresh rate.</param>
|
||||
/// <param name="isInterlaced">The boolean value indicating if the preferred resolution is an interlaced resolution.</param>
|
||||
/// <returns>Returns a valid instance of <see cref="Timing" />.</returns>
|
||||
public Timing CalculateTiming(uint width, uint height, float refreshRate, bool isInterlaced)
|
||||
{
|
||||
return DisplayApi.GetTiming(
|
||||
DisplayId,
|
||||
new TimingInput(width, height, refreshRate, TimingOverride.Auto, isInterlaced)
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deletes a custom resolution.
|
||||
/// </summary>
|
||||
/// <param name="customResolution">The custom resolution to delete.</param>
|
||||
public void DeleteCustomResolution(CustomResolution customResolution)
|
||||
{
|
||||
DeleteCustomResolution(customResolution, new[] {DisplayId});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the list of custom resolutions saved for this display device
|
||||
/// </summary>
|
||||
/// <returns>A list of <see cref="CustomResolution" /> instances.</returns>
|
||||
public IEnumerable<CustomResolution> GetCustomResolutions()
|
||||
{
|
||||
return DisplayApi.EnumCustomDisplays(DisplayId).Select(custom => new CustomResolution(custom));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a color data is supported on this display
|
||||
/// </summary>
|
||||
/// <param name="colorData">The color data to be checked.</param>
|
||||
/// <returns>true if the color data passed is supported; otherwise false</returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the HDMI audio info-frame information to default
|
||||
/// </summary>
|
||||
public void ResetHDMIAudioFrameInformation()
|
||||
{
|
||||
var infoFrame = new InfoFrameData(
|
||||
InfoFrameCommand.Reset,
|
||||
InfoFrameDataType.AudioInformation
|
||||
);
|
||||
DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the HDMI auxiliary video info-frame information to default
|
||||
/// </summary>
|
||||
public void ResetHDMIVideoFrameInformation()
|
||||
{
|
||||
var infoFrame = new InfoFrameData(
|
||||
InfoFrameCommand.Reset,
|
||||
InfoFrameDataType.AuxiliaryVideoInformation
|
||||
);
|
||||
DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reverts the custom resolution currently on trial.
|
||||
/// </summary>
|
||||
public void RevertCustomResolution()
|
||||
{
|
||||
RevertCustomResolution(new[] {DisplayId});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the custom resolution currently on trial.
|
||||
/// </summary>
|
||||
/// <param name="isThisOutputIdOnly">
|
||||
/// If set, the saved custom display will only be applied on the monitor with the same
|
||||
/// outputId.
|
||||
/// </param>
|
||||
/// <param name="isThisMonitorOnly">
|
||||
/// 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.
|
||||
/// </param>
|
||||
public void SaveCustomResolution(bool isThisOutputIdOnly = true, bool isThisMonitorOnly = true)
|
||||
{
|
||||
SaveCustomResolution(new[] {DisplayId}, isThisOutputIdOnly, isThisMonitorOnly);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changes the display current color data configuration
|
||||
/// </summary>
|
||||
/// <param name="colorData">The color data to be set.</param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the HDMI video info-frame current or override information
|
||||
/// </summary>
|
||||
/// <param name="audio">The new information.</param>
|
||||
/// <param name="isOverride">A boolean value indicating if the changes should persist mode-set and OS restart.</param>
|
||||
public void SetHDMIAudioFrameInformation(InfoFrameAudio audio, bool isOverride = false)
|
||||
{
|
||||
var infoFrame = new InfoFrameData(
|
||||
isOverride ? InfoFrameCommand.SetOverride : InfoFrameCommand.Set,
|
||||
audio
|
||||
);
|
||||
DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the HDMI audio info-frame property information
|
||||
/// </summary>
|
||||
/// <param name="property">The new property information.</param>
|
||||
public void SetHDMIAudioFramePropertyInformation(InfoFrameProperty property)
|
||||
{
|
||||
var infoFrame = new InfoFrameData(
|
||||
InfoFrameCommand.SetProperty,
|
||||
InfoFrameDataType.AudioInformation,
|
||||
property
|
||||
);
|
||||
DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the HDMI auxiliary video info-frame current or override information
|
||||
/// </summary>
|
||||
/// <param name="video">The new information.</param>
|
||||
/// <param name="isOverride">A boolean value indicating if the changes should persist mode-set and OS restart.</param>
|
||||
public void SetHDMIVideoFrameInformation(InfoFrameVideo video, bool isOverride = false)
|
||||
{
|
||||
var infoFrame = new InfoFrameData(
|
||||
isOverride ? InfoFrameCommand.SetOverride : InfoFrameCommand.Set,
|
||||
video
|
||||
);
|
||||
DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the HDMI auxiliary video info-frame property information
|
||||
/// </summary>
|
||||
/// <param name="property">The new property information.</param>
|
||||
public void SetHDMIVideoFramePropertyInformation(InfoFrameProperty property)
|
||||
{
|
||||
var infoFrame = new InfoFrameData(
|
||||
InfoFrameCommand.SetProperty,
|
||||
InfoFrameDataType.AuxiliaryVideoInformation,
|
||||
property
|
||||
);
|
||||
DisplayApi.InfoFrameControl(DisplayId, ref infoFrame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changes the display HDR color data configuration
|
||||
/// </summary>
|
||||
/// <param name="colorData">The color data to be set.</param>
|
||||
public void SetHDRColorData(HDRColorData colorData)
|
||||
{
|
||||
var instances = new IHDRColorData[]
|
||||
{
|
||||
colorData.AsHDRColorDataV2(ColorDataHDRCommand.Set),
|
||||
colorData.AsHDRColorDataV1(ColorDataHDRCommand.Set)
|
||||
};
|
||||
|
||||
DisplayApi.HDRColorControl(DisplayId, instances);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Applies a custom resolution into trial.
|
||||
/// </summary>
|
||||
/// <param name="customResolution">The custom resolution to apply.</param>
|
||||
/// <param name="hardwareModeSetOnly">
|
||||
/// A boolean value indicating that a hardware mode-set without OS update should be
|
||||
/// performed.
|
||||
/// </param>
|
||||
public void TrialCustomResolution(CustomResolution customResolution, bool hardwareModeSetOnly = true)
|
||||
{
|
||||
TrialCustomResolution(customResolution, new[] {DisplayId}, hardwareModeSetOnly);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,183 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a texture of float values
|
||||
/// </summary>
|
||||
public class FloatTexture : IEquatable<FloatTexture>
|
||||
{
|
||||
/// <summary>
|
||||
/// Underlying float array containing the values of all channels in all pixels
|
||||
/// </summary>
|
||||
protected readonly float[] UnderlyingArray;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="FloatTexture" />.
|
||||
/// </summary>
|
||||
/// <param name="width">The texture width.</param>
|
||||
/// <param name="height">The texture height.</param>
|
||||
/// <param name="channels">The number of texture channels.</param>
|
||||
public FloatTexture(int width, int height, int channels) : this(width, height, channels, null)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="FloatTexture" />.
|
||||
/// </summary>
|
||||
/// <param name="width">The texture width.</param>
|
||||
/// <param name="height">The texture height.</param>
|
||||
/// <param name="channels">The number of texture channels.</param>
|
||||
/// <param name="array">The underlying array containing all float values.</param>
|
||||
// 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];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of texture channels
|
||||
/// </summary>
|
||||
public int Channels { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the texture height in pixel
|
||||
/// </summary>
|
||||
public int Height { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the texture width in pixels
|
||||
/// </summary>
|
||||
public int Width { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a new instance of FloatTexture from the passed array of float values.
|
||||
/// </summary>
|
||||
/// <param name="width">The texture width.</param>
|
||||
/// <param name="height">The texture height.</param>
|
||||
/// <param name="channels">The texture channels.</param>
|
||||
/// <param name="floats">The array of float values.</param>
|
||||
/// <returns>A new instance of <see cref="FloatTexture" />.</returns>
|
||||
// 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());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="FloatTexture" /> for equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns><see langword="true" /> if both instances are equal, otherwise <see langword="false" /></returns>
|
||||
public static bool operator ==(FloatTexture left, FloatTexture right)
|
||||
{
|
||||
return Equals(left, right) || left?.Equals(right) == true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="FloatTexture" /> for in-equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns><see langword="true" /> if both instances are not equal, otherwise <see langword="false" /></returns>
|
||||
public static bool operator !=(FloatTexture left, FloatTexture right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, obj))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Equals(obj as FloatTexture);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return UnderlyingArray.GetHashCode();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the values of each channel at a specific location
|
||||
/// </summary>
|
||||
/// <param name="x">The horizontal location.</param>
|
||||
/// <param name="y">The vertical location.</param>
|
||||
/// <returns>An array of float values each representing a channel value.</returns>
|
||||
public float[] GetValues(int x, int y)
|
||||
{
|
||||
return UnderlyingArray.Skip(y * Width + x).Take(Channels).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the value of each channel at a specific location
|
||||
/// </summary>
|
||||
/// <param name="x">The horizontal location.</param>
|
||||
/// <param name="y">The vertical location.</param>
|
||||
/// <param name="floats">An array of float values each representing a channel value.</param>
|
||||
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];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns this instance of <see cref="FloatTexture" /> as an array of float values.
|
||||
/// </summary>
|
||||
/// <returns>An array of float values representing this instance of <see cref="FloatTexture" />.</returns>
|
||||
public float[] ToFloatArray()
|
||||
{
|
||||
// Returns a copy of the underlying array
|
||||
return UnderlyingArray.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,157 +0,0 @@
|
||||
using System;
|
||||
using NvAPIWrapper.Native.Display;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
using NvAPIWrapper.Native.Interfaces.Display;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <inheritdoc cref="IHDRColorData" />
|
||||
public class HDRColorData : IHDRColorData, IEquatable<HDRColorData>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates an instance of <see cref="HDRColorData" />.
|
||||
/// </summary>
|
||||
/// <param name="hdrMode">The hdr mode.</param>
|
||||
/// <param name="masteringDisplayData">The display color space configurations.</param>
|
||||
/// <param name="colorFormat">The color data color format.</param>
|
||||
/// <param name="dynamicRange">The color data dynamic range.</param>
|
||||
/// <param name="colorDepth">The color data color depth.</param>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataDepth? ColorDepth { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataFormat? ColorFormat { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataDynamicRange? DynamicRange { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ColorDataHDRMode HDRMode { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public MasteringDisplayColorData MasteringDisplayData { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instances of <see cref="HDRColorData" /> for equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns>true if two instances are equal; otherwise false.</returns>
|
||||
public static bool operator ==(HDRColorData left, HDRColorData right)
|
||||
{
|
||||
return left?.Equals(right) == true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instances of <see cref="HDRColorData" /> for inequality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns>true if two instances are not equal; otherwise false.</returns>
|
||||
public static bool operator !=(HDRColorData left, HDRColorData right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// This class contains and provides a way to modify the HUE angle
|
||||
/// </summary>
|
||||
public class HUEInformation
|
||||
{
|
||||
private readonly DisplayHandle _displayHandle = DisplayHandle.DefaultHandle;
|
||||
private readonly OutputId _outputId = OutputId.Invalid;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of the class using a DisplayHandle
|
||||
/// </summary>
|
||||
/// <param name="displayHandle">The handle of the display.</param>
|
||||
public HUEInformation(DisplayHandle displayHandle)
|
||||
{
|
||||
_displayHandle = displayHandle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of this class using a OutputId
|
||||
/// </summary>
|
||||
/// <param name="outputId">The output identification of a display or an output</param>
|
||||
public HUEInformation(OutputId outputId)
|
||||
{
|
||||
_outputId = outputId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the current HUE offset angle [0-359]
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default HUE offset angle [0-359]
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{CurrentAngle:D}º [{DefaultAngle:D}º]";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a texture of intensity values
|
||||
/// </summary>
|
||||
public class IntensityTexture : FloatTexture
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="IntensityTexture" />.
|
||||
/// </summary>
|
||||
/// <param name="width">The texture width.</param>
|
||||
/// <param name="height">The texture height.</param>
|
||||
public IntensityTexture(int width, int height) : base(width, height, 3)
|
||||
{
|
||||
}
|
||||
|
||||
private IntensityTexture(int width, int height, float[] floats) : base(width, height, 3, floats)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a new instance of FloatTexture from the passed array of float values.
|
||||
/// </summary>
|
||||
/// <param name="width">The texture width.</param>
|
||||
/// <param name="height">The texture height.</param>
|
||||
/// <param name="floats">The array of float values.</param>
|
||||
/// <returns>A new instance of <see cref="FloatTexture" />.</returns>
|
||||
// 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());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the value of intensity pixel at a specific location.
|
||||
/// </summary>
|
||||
/// <param name="x">The horizontal location.</param>
|
||||
/// <param name="y">The vertical location.</param>
|
||||
/// <returns>An instance of <see cref="IntensityTexturePixel" />.</returns>
|
||||
public IntensityTexturePixel GetPixel(int x, int y)
|
||||
{
|
||||
return IntensityTexturePixel.FromFloatArray(UnderlyingArray, y * Width + x);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the value of intensity pixel at a specific location
|
||||
/// </summary>
|
||||
/// <param name="x">The horizontal location.</param>
|
||||
/// <param name="y">The vertical location.</param>
|
||||
/// <param name="pixel">An instance of <see cref="IntensityTexturePixel" />.</param>
|
||||
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];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,117 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a RGB intensity texture pixel
|
||||
/// </summary>
|
||||
public class IntensityTexturePixel : IEquatable<IntensityTexturePixel>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="IntensityTexturePixel" />.
|
||||
/// </summary>
|
||||
/// <param name="redIntensity">The intensity of the red light (0-1)</param>
|
||||
/// <param name="greenIntensity">The intensity of the green light (0-1)</param>
|
||||
/// <param name="blueIntensity">The intensity of the blue light (0-1)</param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the intensity of the blue light (0-1)
|
||||
/// </summary>
|
||||
public float BlueIntensity { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the intensity of the green light (0-1)
|
||||
/// </summary>
|
||||
public float GreenIntensity { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the intensity of the red light (0-1)
|
||||
/// </summary>
|
||||
public float RedIntensity { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="IntensityTexturePixel" /> for equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns><see langword="true" /> if both instances are equal, otherwise <see langword="false" /></returns>
|
||||
public static bool operator ==(IntensityTexturePixel left, IntensityTexturePixel right)
|
||||
{
|
||||
return Equals(left, right) || left?.Equals(right) == true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="IntensityTexturePixel" /> for in-equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns><see langword="true" /> if both instances are not equal, otherwise <see langword="false" /></returns>
|
||||
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]);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, obj))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Equals(obj as IntensityTexturePixel);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a configuration path
|
||||
/// </summary>
|
||||
public class PathInfo : IEquatable<PathInfo>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new PathInfo
|
||||
/// </summary>
|
||||
/// <param name="resolution">Display resolution</param>
|
||||
/// <param name="colorFormat">Display color format</param>
|
||||
/// <param name="targetInfos">Target configuration informations</param>
|
||||
public PathInfo(Resolution resolution, ColorFormat colorFormat, PathTargetInfo[] targetInfos)
|
||||
{
|
||||
Resolution = resolution;
|
||||
ColorFormat = colorFormat;
|
||||
TargetsInfo = targetInfos;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new PathInfo
|
||||
/// </summary>
|
||||
/// <param name="info">IPathInfo implamented object</param>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the display color format
|
||||
/// </summary>
|
||||
public ColorFormat ColorFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a boolean value indicating if the this is the primary GDI display
|
||||
/// </summary>
|
||||
public bool IsGDIPrimary { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a boolean value indicating if the this is the SLI focus display
|
||||
/// </summary>
|
||||
public bool IsSLIFocus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets OS Adapter of LUID for Non-NVIDIA adapters
|
||||
/// </summary>
|
||||
public LUID? OSAdapterLUID { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the display position
|
||||
/// </summary>
|
||||
public Position Position { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the display resolution
|
||||
/// </summary>
|
||||
public Resolution Resolution { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the Windows CCD display source identification. This can be optionally set.
|
||||
/// </summary>
|
||||
public uint SourceId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the display spanning orientation, valid for XP only
|
||||
/// </summary>
|
||||
public SpanningOrientation SpanningOrientation { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets information about path targets
|
||||
/// </summary>
|
||||
public PathTargetInfo[] TargetsInfo { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality with a PathInfo instance
|
||||
/// </summary>
|
||||
/// <param name="other">The PathInfo object to check with</param>
|
||||
/// <returns>true if both objects are equal, otherwise false</returns>
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills a PathInfo object
|
||||
/// </summary>
|
||||
/// <returns>The newly created PathInfo object</returns>
|
||||
public static PathInfo[] GetDisplaysConfig()
|
||||
{
|
||||
var configs = DisplayApi.GetDisplayConfig();
|
||||
var logicalDisplays = configs.Select(info => new PathInfo(info)).ToArray();
|
||||
configs.DisposeAll();
|
||||
|
||||
return logicalDisplays;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(PathInfo left, PathInfo right)
|
||||
{
|
||||
return right?.Equals(left) ?? ReferenceEquals(left, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(PathInfo left, PathInfo right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Applies one or more path information configurations
|
||||
/// </summary>
|
||||
/// <param name="pathInfos">An array of path information configuration</param>
|
||||
/// <param name="flags">DisplayConfigFlags flags</param>
|
||||
public static void SetDisplaysConfig(PathInfo[] pathInfos, DisplayConfigFlags flags)
|
||||
{
|
||||
try
|
||||
{
|
||||
var configsV2 = pathInfos.Select(config => config.GetPathInfoV2()).Cast<IPathInfo>().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<IPathInfo>().ToArray();
|
||||
DisplayApi.SetDisplayConfig(configsV1, flags);
|
||||
configsV1.DisposeAll();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{Resolution} @ {Position} [{TargetsInfo.Length}]";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills a GetPathInfoV1 object
|
||||
/// </summary>
|
||||
/// <returns>The newly created GetPathInfoV1 object</returns>
|
||||
public PathInfoV1 GetPathInfoV1()
|
||||
{
|
||||
var sourceModeInfo = GetSourceModeInfo();
|
||||
var pathTargetInfoV1 = GetPathTargetInfoV1Array();
|
||||
|
||||
return new PathInfoV1(pathTargetInfoV1, sourceModeInfo, SourceId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills a GetPathInfoV2 object
|
||||
/// </summary>
|
||||
/// <returns>The newly created GetPathInfoV2 object</returns>
|
||||
public PathInfoV2 GetPathInfoV2()
|
||||
{
|
||||
var sourceModeInfo = GetSourceModeInfo();
|
||||
var pathTargetInfoV2 = GetPathTargetInfoV2Array();
|
||||
|
||||
return new PathInfoV2(pathTargetInfoV2, sourceModeInfo, SourceId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills an array of GetPathTargetInfoV1 object
|
||||
/// </summary>
|
||||
/// <returns>The newly created array of GetPathTargetInfoV1 objects</returns>
|
||||
public PathTargetInfoV1[] GetPathTargetInfoV1Array()
|
||||
{
|
||||
return TargetsInfo.Select(config => config.GetPathTargetInfoV1()).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills an array of GetPathTargetInfoV2 object
|
||||
/// </summary>
|
||||
/// <returns>The newly created array of GetPathTargetInfoV2 objects</returns>
|
||||
public PathTargetInfoV2[] GetPathTargetInfoV2Array()
|
||||
{
|
||||
return TargetsInfo.Select(config => config.GetPathTargetInfoV2()).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills a SourceModeInfo object
|
||||
/// </summary>
|
||||
/// <returns>The newly created SourceModeInfo object</returns>
|
||||
public SourceModeInfo GetSourceModeInfo()
|
||||
{
|
||||
return new SourceModeInfo(Resolution, ColorFormat, Position, SpanningOrientation, IsGDIPrimary, IsSLIFocus);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a display configuration on a path
|
||||
/// </summary>
|
||||
public class PathTargetInfo : IEquatable<PathTargetInfo>
|
||||
{
|
||||
private TimingOverride _timingOverride;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new PathTargetInfo
|
||||
/// </summary>
|
||||
/// <param name="info">IPathTargetInfo implamented object</param>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new PathTargetInfo
|
||||
/// </summary>
|
||||
/// <param name="device">DisplayDevice object</param>
|
||||
public PathTargetInfo(DisplayDevice device)
|
||||
{
|
||||
DisplayDevice = device;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the virtual mode support
|
||||
/// </summary>
|
||||
public bool DisableVirtualModeSupport { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets corresponding DisplayDevice
|
||||
/// </summary>
|
||||
public DisplayDevice DisplayDevice { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the pan and scan is availability. Valid only when the target is part of clone
|
||||
/// topology.
|
||||
/// </summary>
|
||||
public bool IsClonePanAndScanTarget { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
public bool IsClonePrimary { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the interlaced mode flag, ignored if refreshRate == 0
|
||||
/// </summary>
|
||||
public bool IsInterlaced { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the preferred unscaled mode of target
|
||||
/// </summary>
|
||||
public bool IsPreferredUnscaledTarget { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
public uint RefreshRateInMillihertz { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets and sets the rotation setting
|
||||
/// </summary>
|
||||
public Rotate Rotation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets and sets the scaling setting
|
||||
/// </summary>
|
||||
public Scaling Scaling { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets and sets the custom timing of display
|
||||
/// Ignored if TimingOverride == TimingOverride.Current
|
||||
/// </summary>
|
||||
public TimingOverride TimingOverride
|
||||
{
|
||||
get => _timingOverride;
|
||||
set
|
||||
{
|
||||
if (value == TimingOverride.Custom)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("Custom timing is not supported yet.");
|
||||
}
|
||||
|
||||
_timingOverride = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets and sets the connector type. For TV only, ignored if TVFormat == TVFormat.None.
|
||||
/// </summary>
|
||||
public ConnectorType TVConnectorType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets and sets the TV format. For TV only, otherwise set to TVFormat.None
|
||||
/// </summary>
|
||||
public TVFormat TVFormat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Windows CCD target ID. Must be present only for non-NVIDIA adapter, for NVIDIA adapter this parameter is
|
||||
/// ignored.
|
||||
/// </summary>
|
||||
public uint WindowsCCDTargetId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality with a PathTargetInfo instance
|
||||
/// </summary>
|
||||
/// <param name="other">The PathTargetInfo object to check with</param>
|
||||
/// <returns>true if both objects are equal, otherwise false</returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(PathTargetInfo left, PathTargetInfo right)
|
||||
{
|
||||
return right?.Equals(left) ?? ReferenceEquals(left, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(PathTargetInfo left, PathTargetInfo right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
var strs = new List<string>
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills a PathAdvancedTargetInfo object
|
||||
/// </summary>
|
||||
/// <returns>The newly created PathAdvancedTargetInfo object</returns>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills a PathTargetInfoV1 object
|
||||
/// </summary>
|
||||
/// <returns>The newly created PathTargetInfoV1 object</returns>
|
||||
public PathTargetInfoV1 GetPathTargetInfoV1()
|
||||
{
|
||||
var pathAdvancedTargetInfo = GetPathAdvancedTargetInfo();
|
||||
|
||||
return new PathTargetInfoV1(DisplayDevice.DisplayId, pathAdvancedTargetInfo);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates and fills a PathTargetInfoV2 object
|
||||
/// </summary>
|
||||
/// <returns>The newly created PathTargetInfoV2 object</returns>
|
||||
public PathTargetInfoV2 GetPathTargetInfoV2()
|
||||
{
|
||||
var pathAdvancedTargetInfo = GetPathAdvancedTargetInfo();
|
||||
|
||||
return new PathTargetInfoV2(DisplayDevice.DisplayId, WindowsCCDTargetId, pathAdvancedTargetInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information regarding the scan-out buffer settings of a display device
|
||||
/// </summary>
|
||||
public class ScanOutInformation
|
||||
{
|
||||
internal ScanOutInformation(DisplayDevice displayDevice)
|
||||
{
|
||||
DisplayDevice = displayDevice;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the clone importance assigned to the target if the target is a cloned view of the SourceDesktopRectangle
|
||||
/// (0:primary,1 secondary,...).
|
||||
/// </summary>
|
||||
public uint CloneImportance
|
||||
{
|
||||
get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).CloneImportance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the display device that this instance describes
|
||||
/// </summary>
|
||||
public DisplayDevice DisplayDevice { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if the display device scan out output is warped
|
||||
/// </summary>
|
||||
public bool IsDisplayWarped
|
||||
{
|
||||
get => DisplayApi.GetScanOutWarpingState(DisplayDevice.DisplayId).IsEnabled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if the display device intensity is modified
|
||||
/// </summary>
|
||||
public bool IsIntensityModified
|
||||
{
|
||||
get => DisplayApi.GetScanOutIntensityState(DisplayDevice.DisplayId).IsEnabled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the operating system display device rectangle in desktop coordinates displayId is scanning out from.
|
||||
/// </summary>
|
||||
public Rectangle SourceDesktopRectangle
|
||||
{
|
||||
get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).SourceDesktopRectangle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the rotation performed between the SourceViewPortRectangle and the TargetViewPortRectangle.
|
||||
/// </summary>
|
||||
public Rotate SourceToTargetRotation
|
||||
{
|
||||
get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).SourceToTargetRotation;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the area inside the SourceDesktopRectangle which is scanned out to the display.
|
||||
/// </summary>
|
||||
public Rectangle SourceViewPortRectangle
|
||||
{
|
||||
get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).SourceViewPortRectangle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the vertical size of the active resolution scanned out to the display.
|
||||
/// </summary>
|
||||
public uint TargetDisplayHeight
|
||||
{
|
||||
get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).TargetDisplayHeight;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the horizontal size of the active resolution scanned out to the display.
|
||||
/// </summary>
|
||||
public uint TargetDisplayWidth
|
||||
{
|
||||
get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).TargetDisplayWidth;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the area inside the rectangle described by targetDisplayWidth/Height SourceViewPortRectangle is scanned out
|
||||
/// to.
|
||||
/// </summary>
|
||||
public Rectangle TargetViewPortRectangle
|
||||
{
|
||||
get => DisplayApi.GetScanOutConfiguration(DisplayDevice.DisplayId).TargetViewPortRectangle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disables the intensity modification on the display device scan-out buffer.
|
||||
/// </summary>
|
||||
/// <param name="isSticky">A boolean value that indicates whether the settings will be kept over a reboot.</param>
|
||||
public void DisableIntensityModifications(out bool isSticky)
|
||||
{
|
||||
DisplayApi.SetScanOutIntensity(DisplayDevice.DisplayId, null, out isSticky);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disables the warping of display device scan-out buffer.
|
||||
/// </summary>
|
||||
/// <param name="isSticky">A boolean value that indicates whether the settings will be kept over a reboot.</param>
|
||||
public void DisableWarping(out bool isSticky)
|
||||
{
|
||||
var vorticesCount = 0;
|
||||
DisplayApi.SetScanOutWarping(DisplayDevice.DisplayId, null, ref vorticesCount, out isSticky);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables the intensity modification on the display device scan-out buffer.
|
||||
/// </summary>
|
||||
/// <param name="intensityTexture">The intensity texture to apply to the scan-out buffer.</param>
|
||||
/// <param name="isSticky">A boolean value that indicates whether the settings will be kept over a reboot.</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables the intensity modification on the display device scan-out buffer.
|
||||
/// </summary>
|
||||
/// <param name="intensityTexture">The intensity texture to apply to the scan-out buffer.</param>
|
||||
/// <param name="offsetTexture">The offset texture to apply to the scan-out buffer.</param>
|
||||
/// <param name="isSticky">A boolean value that indicates whether the settings will be kept over a reboot.</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables the warping of display device scan-out buffer
|
||||
/// </summary>
|
||||
/// <param name="warpingVerticeFormat">The type of warping vortexes.</param>
|
||||
/// <param name="vortices">An array of warping vortexes.</param>
|
||||
/// <param name="textureRectangle">The rectangle in desktop coordinates describing the source area for the warping.</param>
|
||||
/// <param name="isSticky">A boolean value that indicates whether the settings will be kept over a reboot.</param>
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Queries the current state of one of the various scan-out composition parameters.
|
||||
/// </summary>
|
||||
/// <param name="parameter">The scan-out composition parameter.</param>
|
||||
/// <param name="additionalValue">The additional value included with the parameter value.</param>
|
||||
/// <returns>The scan-out composition parameter value.</returns>
|
||||
public ScanOutCompositionParameterValue GetCompositionParameterValue(
|
||||
ScanOutCompositionParameter parameter,
|
||||
out float additionalValue)
|
||||
{
|
||||
return DisplayApi.GetScanOutCompositionParameter(DisplayDevice.DisplayId, parameter, out additionalValue);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Sets the current state of one of the various scan-out composition parameters.
|
||||
/// </summary>
|
||||
/// <param name="parameter">The scan-out composition parameter.</param>
|
||||
/// <param name="parameterValue">The scan-out composition parameter value.</param>
|
||||
/// <param name="additionalValue">The additional value included with the parameter value.</param>
|
||||
public void SetCompositionParameterValue(
|
||||
ScanOutCompositionParameter parameter,
|
||||
ScanOutCompositionParameterValue parameterValue,
|
||||
float additionalValue)
|
||||
{
|
||||
DisplayApi.SetScanOutCompositionParameter(DisplayDevice.DisplayId, parameter, parameterValue,
|
||||
ref additionalValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,150 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an unattached display
|
||||
/// </summary>
|
||||
public class UnAttachedDisplay : IEquatable<UnAttachedDisplay>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new UnAttachedDisplay
|
||||
/// </summary>
|
||||
/// <param name="handle">Handle of the unattached display device</param>
|
||||
public UnAttachedDisplay(UnAttachedDisplayHandle handle)
|
||||
{
|
||||
Handle = handle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new UnAttachedDisplay
|
||||
/// </summary>
|
||||
/// <param name="displayName">Name of the unattached display device</param>
|
||||
public UnAttachedDisplay(string displayName)
|
||||
{
|
||||
Handle = DisplayApi.GetAssociatedUnAttachedNvidiaDisplayHandle(displayName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets display handle
|
||||
/// </summary>
|
||||
public UnAttachedDisplayHandle Handle { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets display name
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get => DisplayApi.GetUnAttachedAssociatedDisplayName(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets corresponding physical GPU
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU
|
||||
{
|
||||
get => new PhysicalGPU(GPUApi.GetPhysicalGPUFromUnAttachedDisplay(Handle));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality with a UnAttachedDisplay instance
|
||||
/// </summary>
|
||||
/// <param name="other">The Display object to check with</param>
|
||||
/// <returns>true if both objects are equal, otherwise false</returns>
|
||||
public bool Equals(UnAttachedDisplay other)
|
||||
{
|
||||
if (ReferenceEquals(null, other))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, other))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Handle.Equals(other.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This function returns all unattached NVIDIA displays
|
||||
/// Note: Display handles can get invalidated on a modeset.
|
||||
/// </summary>
|
||||
/// <returns>An array of Display objects</returns>
|
||||
public static UnAttachedDisplay[] GetUnAttachedDisplays()
|
||||
{
|
||||
return
|
||||
DisplayApi.EnumNvidiaUnAttachedDisplayHandle().Select(handle => new UnAttachedDisplay(handle))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(UnAttachedDisplay left, UnAttachedDisplay right)
|
||||
{
|
||||
return right?.Equals(left) ?? ReferenceEquals(left, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(UnAttachedDisplay left, UnAttachedDisplay right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Handle.GetHashCode();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
/// <returns>An active attached display</returns>
|
||||
public Display CreateDisplay()
|
||||
{
|
||||
return new Display(DisplayApi.CreateDisplayFromUnAttachedDisplay(Handle));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,165 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NvAPIWrapper.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a XYUVRQ scan-out warping vortex
|
||||
/// </summary>
|
||||
public class XYUVRQVortex : IEquatable<XYUVRQVortex>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="XYUVRQVortex" />.
|
||||
/// </summary>
|
||||
/// <param name="x">The target view port mesh horizontal coordinate</param>
|
||||
/// <param name="y">The target view port mesh vertical coordinate</param>
|
||||
/// <param name="u">The desktop view port texture horizontal coordinate</param>
|
||||
/// <param name="v">The desktop view port texture vertical coordinate</param>
|
||||
/// <param name="r">The 3D warp perspective R factor</param>
|
||||
/// <param name="q">The 3D warp perspective Q factor</param>
|
||||
// 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 3D warp perspective Q factor
|
||||
/// </summary>
|
||||
public float Q { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 3D warp perspective R factor
|
||||
/// </summary>
|
||||
public float R { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Desktop view port texture horizontal coordinate
|
||||
/// </summary>
|
||||
public int U { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Desktop view port texture vertical coordinate
|
||||
/// </summary>
|
||||
public int V { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Target view port mesh horizontal coordinate
|
||||
/// </summary>
|
||||
public int X { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Target view port mesh vertical coordinate
|
||||
/// </summary>
|
||||
public int Y { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses an array of floats and returns the corresponding <see cref="XYUVRQVortex" />s.
|
||||
/// </summary>
|
||||
/// <param name="floats">The array of float representing one or more <see cref="XYUVRQVortex" />s.</param>
|
||||
/// <returns>Instances of <see cref="XYUVRQVortex" />.</returns>
|
||||
public static IEnumerable<XYUVRQVortex> 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]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="XYUVRQVortex" /> for equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns><see langword="true" /> if both instances are equal, otherwise <see langword="false" /></returns>
|
||||
public static bool operator ==(XYUVRQVortex left, XYUVRQVortex right)
|
||||
{
|
||||
return Equals(left, right) || left?.Equals(right) == true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two instance of <see cref="XYUVRQVortex" /> for in-equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The first instance.</param>
|
||||
/// <param name="right">The second instance.</param>
|
||||
/// <returns><see langword="true" /> if both instances are not equal, otherwise <see langword="false" /></returns>
|
||||
public static bool operator !=(XYUVRQVortex left, XYUVRQVortex right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, obj))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Equals(obj as XYUVRQVortex);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns this instance of <see cref="XYUVRQVortex"/> as a float array.
|
||||
/// </summary>
|
||||
/// <returns>An array of float values representing this instance of <see cref="XYUVRQVortex"/>.</returns>
|
||||
public float[] AsFloatArray()
|
||||
{
|
||||
return new[] {X, Y, U, V, R, Q};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about the accelerated graphics connection
|
||||
/// </summary>
|
||||
public class AGPInformation
|
||||
{
|
||||
internal AGPInformation(int aperture, int currentRate)
|
||||
{
|
||||
ApertureInMB = aperture;
|
||||
CurrentRate = currentRate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets AGP aperture in megabytes
|
||||
/// </summary>
|
||||
public int ApertureInMB { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets current AGP Rate (0 = AGP not present, 1 = 1x, 2 = 2x, etc.)
|
||||
/// </summary>
|
||||
public int CurrentRate { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"AGP Aperture: {ApertureInMB}MB, Current Rate: {CurrentRate}x";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,201 +0,0 @@
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about the ECC memory
|
||||
/// </summary>
|
||||
public class ECCMemoryInformation
|
||||
{
|
||||
internal ECCMemoryInformation(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of aggregated ECC memory double bit errors
|
||||
/// </summary>
|
||||
public ulong AggregatedDoubleBitErrors
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsSupported || !IsEnabled)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).AggregatedErrors.DoubleBitErrors;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of aggregated ECC memory single bit errors
|
||||
/// </summary>
|
||||
public ulong AggregatedSingleBitErrors
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsSupported || !IsEnabled)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).AggregatedErrors.SingleBitErrors;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the ECC memory configuration in regard to how changes are applied
|
||||
/// </summary>
|
||||
public ECCConfiguration Configuration
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
return GPUApi.GetECCStatusInfo(PhysicalGPU.Handle).ConfigurationOptions;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return ECCConfiguration.NotSupported;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of current ECC memory double bit errors
|
||||
/// </summary>
|
||||
public ulong CurrentDoubleBitErrors
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsSupported || !IsEnabled)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).CurrentErrors.DoubleBitErrors;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of current ECC memory single bit errors
|
||||
/// </summary>
|
||||
public ulong CurrentSingleBitErrors
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsSupported || !IsEnabled)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return GPUApi.GetECCErrorInfo(PhysicalGPU.Handle).CurrentErrors.SingleBitErrors;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if ECC memory error correction is enabled
|
||||
/// </summary>
|
||||
|
||||
public bool IsEnabled
|
||||
{
|
||||
get => IsSupported &&
|
||||
GPUApi.GetECCStatusInfo(PhysicalGPU.Handle).IsEnabled &&
|
||||
GPUApi.GetECCConfigurationInfo(PhysicalGPU.Handle).IsEnabled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if ECC memory is enabled by default
|
||||
/// </summary>
|
||||
public bool IsEnabledByDefault
|
||||
{
|
||||
get => IsSupported &&
|
||||
GPUApi.GetECCConfigurationInfo(PhysicalGPU.Handle).IsEnabledByDefault;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if ECC memory is supported and available
|
||||
/// </summary>
|
||||
public bool IsSupported
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
return GPUApi.GetECCStatusInfo(PhysicalGPU.Handle).IsSupported;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
if (!IsSupported)
|
||||
{
|
||||
return "[Not Supported]";
|
||||
}
|
||||
|
||||
if (!IsEnabled)
|
||||
{
|
||||
return "[Disabled]";
|
||||
}
|
||||
|
||||
return
|
||||
$"{CurrentSingleBitErrors}, {CurrentDoubleBitErrors} ({AggregatedSingleBitErrors}, {AggregatedDoubleBitErrors})";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears aggregated error counters.
|
||||
/// </summary>
|
||||
public void ClearAggregatedErrors()
|
||||
{
|
||||
GPUApi.ResetECCErrorInfo(PhysicalGPU.Handle, false, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears current error counters.
|
||||
/// </summary>
|
||||
public void ClearCurrentErrors()
|
||||
{
|
||||
GPUApi.ResetECCErrorInfo(PhysicalGPU.Handle, true, false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears all error counters.
|
||||
/// </summary>
|
||||
public void ClearErrors()
|
||||
{
|
||||
GPUApi.ResetECCErrorInfo(PhysicalGPU.Handle, true, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disables ECC memory error correction.
|
||||
/// </summary>
|
||||
/// <param name="immediate">A boolean value to indicate if this change should get applied immediately</param>
|
||||
public void Disable(bool immediate)
|
||||
{
|
||||
GPUApi.SetECCConfiguration(PhysicalGPU.Handle, false, immediate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables ECC memory error correction.
|
||||
/// </summary>
|
||||
/// <param name="immediate">A boolean value to indicate if this change should get applied immediately</param>
|
||||
public void Enable(bool immediate)
|
||||
{
|
||||
GPUApi.SetECCConfiguration(PhysicalGPU.Handle, true, immediate);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
using NvAPIWrapper.Native;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains physical GPU architect information
|
||||
/// </summary>
|
||||
public class GPUArchitectInformation
|
||||
{
|
||||
internal GPUArchitectInformation(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets total number of cores defined for this GPU, or zero for older architectures
|
||||
/// </summary>
|
||||
public int NumberOfCores
|
||||
{
|
||||
get => (int) GPUApi.GetGPUCoreCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of graphics processing clusters (aka GPU Partitions)
|
||||
/// </summary>
|
||||
public int NumberOfGPC
|
||||
{
|
||||
get => (int) GPUApi.GetPartitionCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of render output units
|
||||
/// </summary>
|
||||
public int NumberOfROPs
|
||||
{
|
||||
get => (int) GPUApi.GetROPCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of shader pipelines
|
||||
/// </summary>
|
||||
public int NumberOfShaderPipelines
|
||||
{
|
||||
get => (int) GPUApi.GetShaderPipeCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of shader sub pipelines
|
||||
/// </summary>
|
||||
public int NumberOfShaderSubPipelines
|
||||
{
|
||||
get => (int) GPUApi.GetShaderSubPipeCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of video processing engines
|
||||
/// </summary>
|
||||
public int NumberOfVPEs
|
||||
{
|
||||
get => (int) GPUApi.GetVPECount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GPU revision number (should be displayed as a hex string)
|
||||
/// </summary>
|
||||
public int Revision
|
||||
{
|
||||
get => (int) GPUApi.GetArchitectInfo(PhysicalGPU.Handle).Revision;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GPU short name (aka Codename)
|
||||
/// </summary>
|
||||
public string ShortName
|
||||
{
|
||||
get => GPUApi.GetShortName(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the total number of streaming multiprocessors
|
||||
/// </summary>
|
||||
public int TotalNumberOfSMs
|
||||
{
|
||||
get => (int) GPUApi.GetTotalSMCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the total number of streaming processors
|
||||
/// </summary>
|
||||
public int TotalNumberOfSPs
|
||||
{
|
||||
get => (int) GPUApi.GetTotalSPCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the total number of texture processing clusters
|
||||
/// </summary>
|
||||
public int TotalNumberOfTPCs
|
||||
{
|
||||
get => (int) GPUApi.GetTotalTPCCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"[{ShortName} REV{Revision:X}] Cores: {NumberOfCores}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about the GPU bus
|
||||
/// </summary>
|
||||
public class GPUBusInformation
|
||||
{
|
||||
internal GPUBusInformation(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets accelerated graphics port information
|
||||
/// </summary>
|
||||
public AGPInformation AGPInformation
|
||||
{
|
||||
get
|
||||
{
|
||||
if (BusType != GPUBusType.AGP)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new AGPInformation(
|
||||
GPUApi.GetAGPAperture(PhysicalGPU.Handle),
|
||||
GPUApi.GetCurrentAGPRate(PhysicalGPU.Handle)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the bus identification
|
||||
/// </summary>
|
||||
public int BusId
|
||||
{
|
||||
get => GPUApi.GetBusId(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the bus slot identification
|
||||
/// </summary>
|
||||
public int BusSlot
|
||||
{
|
||||
get => GPUApi.GetBusSlotId(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the the bus type
|
||||
/// </summary>
|
||||
public GPUBusType BusType
|
||||
{
|
||||
get => GPUApi.GetBusType(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets number of PCIe lanes being used for the PCIe interface downstream
|
||||
/// </summary>
|
||||
public int CurrentPCIeLanes
|
||||
{
|
||||
get
|
||||
{
|
||||
if (BusType == GPUBusType.PCIExpress)
|
||||
{
|
||||
return GPUApi.GetCurrentPCIEDownStreamWidth(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU interrupt number
|
||||
/// </summary>
|
||||
public int IRQ
|
||||
{
|
||||
get => GPUApi.GetIRQ(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the PCI identifiers
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"[{BusType}] Bus #{BusId}, Slot #{BusSlot}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,130 +0,0 @@
|
||||
using System;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information regarding a GPU cooler entry
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler control mode
|
||||
/// </summary>
|
||||
public CoolerControlMode ControlMode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler controller
|
||||
/// </summary>
|
||||
public CoolerController CoolerController { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler identification number or index
|
||||
/// </summary>
|
||||
public int CoolerId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler type
|
||||
/// </summary>
|
||||
public CoolerType CoolerType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GPU fan speed in revolutions per minute
|
||||
/// </summary>
|
||||
public int CurrentFanSpeedInRPM { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler current level in percentage
|
||||
/// </summary>
|
||||
public int CurrentLevel { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler current maximum level in percentage
|
||||
/// </summary>
|
||||
public int CurrentMaximumLevel { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler current minimum level in percentage
|
||||
/// </summary>
|
||||
public int CurrentMinimumLevel { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler current policy
|
||||
/// </summary>
|
||||
public CoolerPolicy CurrentPolicy { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler default maximum level in percentage
|
||||
/// </summary>
|
||||
public int DefaultMaximumLevel { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler default minimum level in percentage
|
||||
/// </summary>
|
||||
public int DefaultMinimumLevel { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler default policy
|
||||
/// </summary>
|
||||
public CoolerPolicy DefaultPolicy { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the cooler target
|
||||
/// </summary>
|
||||
public CoolerTarget Target { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"[{CoolerId} @ {CoolerController}] {Target}: {CurrentLevel}%";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about the GPU coolers and current fan speed
|
||||
/// </summary>
|
||||
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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of all available coolers along with their current settings and status
|
||||
/// </summary>
|
||||
public IEnumerable<GPUCooler> 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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GPU fan speed in revolutions per minute
|
||||
/// </summary>
|
||||
public int CurrentFanSpeedInRPM
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
return (int) GPUApi.GetTachReading(PhysicalGPU.Handle);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return Coolers.FirstOrDefault(cooler => cooler.Target == CoolerTarget.All)?.CurrentFanSpeedInRPM ??
|
||||
0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current fan speed in percentage if available
|
||||
/// </summary>
|
||||
public int CurrentFanSpeedLevel
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
return (int) GPUApi.GetCurrentFanSpeedLevel(PhysicalGPU.Handle);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return Coolers.FirstOrDefault(cooler => cooler.Target == CoolerTarget.All)?.CurrentLevel ?? 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{CurrentFanSpeedInRPM} RPM ({CurrentFanSpeedLevel}%)";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets all cooler settings to default.
|
||||
/// </summary>
|
||||
public void RestoreCoolerSettingsToDefault()
|
||||
{
|
||||
RestoreCoolerSettingsToDefault(Coolers.Select(cooler => cooler.CoolerId).ToArray());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets one or more cooler settings to default.
|
||||
/// </summary>
|
||||
/// <param name="coolerIds">The cooler identification numbers (indexes) to reset their settings to default.</param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changes a cooler settings by modifying the policy and the current level
|
||||
/// </summary>
|
||||
/// <param name="coolerId">The cooler identification number (index) to change the settings.</param>
|
||||
/// <param name="policy">The new cooler policy.</param>
|
||||
/// <param name="newLevel">The new cooler level. Valid only if policy is set to manual.</param>
|
||||
// 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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changes a cooler setting by modifying the policy
|
||||
/// </summary>
|
||||
/// <param name="coolerId">The cooler identification number (index) to change the settings.</param>
|
||||
/// <param name="policy">The new cooler policy.</param>
|
||||
// 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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changes a cooler settings by modifying the policy to manual and sets a new level
|
||||
/// </summary>
|
||||
/// <param name="coolerId">The cooler identification number (index) to change the settings.</param>
|
||||
/// <param name="newLevel">The new cooler level.</param>
|
||||
public void SetCoolerSettings(int coolerId, int newLevel)
|
||||
{
|
||||
SetCoolerSettings(coolerId, CoolerPolicy.Manual, newLevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,222 +0,0 @@
|
||||
using System;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// </summary>
|
||||
public class GPUMemoryInformation : IDisplayDriverMemoryInfo
|
||||
{
|
||||
internal GPUMemoryInformation(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the frame buffer bandwidth
|
||||
/// </summary>
|
||||
|
||||
public int FrameBufferBandwidth
|
||||
{
|
||||
get
|
||||
{
|
||||
GPUApi.GetFrameBufferWidthAndLocation(PhysicalGPU.Handle, out var width, out _);
|
||||
|
||||
return (int) width;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the frame buffer location index
|
||||
/// </summary>
|
||||
public int FrameBufferLocation
|
||||
{
|
||||
get
|
||||
{
|
||||
GPUApi.GetFrameBufferWidthAndLocation(PhysicalGPU.Handle, out _, out var location);
|
||||
|
||||
return (int) location;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the internal clock to bus clock factor based on the type of RAM
|
||||
/// </summary>
|
||||
public int InternalClockToBusClockFactor
|
||||
{
|
||||
get => GetMemoryBusClockFactor(RAMType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the internal clock to transfer rate factor based on the type of RAM
|
||||
/// </summary>
|
||||
public int InternalClockToTransferRateFactor
|
||||
{
|
||||
get => GetMemoryTransferRateFactor(RAMType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU physical frame buffer size in KB. This does NOT include any system RAM that may be dedicated for use by
|
||||
/// the GPU.
|
||||
/// </summary>
|
||||
public int PhysicalFrameBufferSizeInkB
|
||||
{
|
||||
get => GPUApi.GetPhysicalFrameBufferSize(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of memory banks
|
||||
/// </summary>
|
||||
public uint RAMBanks
|
||||
{
|
||||
get => GPUApi.GetRAMBankCount(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the memory bus width
|
||||
/// </summary>
|
||||
public uint RAMBusWidth
|
||||
{
|
||||
get => GPUApi.GetRAMBusWidth(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the memory maker (brand)
|
||||
/// </summary>
|
||||
public GPUMemoryMaker RAMMaker
|
||||
{
|
||||
get => GPUApi.GetRAMMaker(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the memory type
|
||||
/// </summary>
|
||||
public GPUMemoryType RAMType
|
||||
{
|
||||
get => GPUApi.GetRAMType(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
public int VirtualFrameBufferSizeInkB
|
||||
{
|
||||
get => GPUApi.GetVirtualFrameBufferSize(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public uint AvailableDedicatedVideoMemoryInkB
|
||||
{
|
||||
get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).AvailableDedicatedVideoMemoryInkB;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public uint CurrentAvailableDedicatedVideoMemoryInkB
|
||||
{
|
||||
get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).CurrentAvailableDedicatedVideoMemoryInkB;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public uint DedicatedVideoMemoryInkB
|
||||
{
|
||||
get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).DedicatedVideoMemoryInkB;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public uint SharedSystemMemoryInkB
|
||||
{
|
||||
get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).SharedSystemMemoryInkB;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public uint SystemVideoMemoryInkB
|
||||
{
|
||||
get => GPUApi.GetMemoryInfo(PhysicalGPU.Handle).SystemVideoMemoryInkB;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the memory bus clock to internal memory clock factor
|
||||
/// </summary>
|
||||
/// <param name="memoryType"></param>
|
||||
/// <returns>The value of X in X(InternalMemoryClock)=(BusMemoryClock)</returns>
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of transfers per internal memory clock factor
|
||||
/// </summary>
|
||||
/// <param name="memoryType"></param>
|
||||
/// <returns>The value of X in X(InternalMemoryClock)=(OperationsPerSecond)</returns>
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return
|
||||
$"[{RAMMaker} {RAMType}] Total: {AvailableDedicatedVideoMemoryInkB:N0} kB - Available: {CurrentAvailableDedicatedVideoMemoryInkB:N0} kB";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a single GPU output
|
||||
/// </summary>
|
||||
public class GPUOutput : IEquatable<GPUOutput>
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding Digital Vibrance Control information
|
||||
/// </summary>
|
||||
public DVCInformation DigitalVibranceControl
|
||||
{
|
||||
get => new DVCInformation(OutputId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding HUE information
|
||||
/// </summary>
|
||||
public HUEInformation HUEControl
|
||||
{
|
||||
get => new HUEInformation(OutputId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the output identification as a single bit unsigned integer
|
||||
/// </summary>
|
||||
public OutputId OutputId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the output type
|
||||
/// </summary>
|
||||
public OutputType OutputType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding physical GPU
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(GPUOutput left, GPUOutput right)
|
||||
{
|
||||
return right?.Equals(left) ?? ReferenceEquals(left, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(GPUOutput left, GPUOutput right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
return ((PhysicalGPU != null ? PhysicalGPU.GetHashCode() : 0) * 397) ^ (int) OutputId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{OutputId} {OutputType} @ {PhysicalGPU}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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).
|
||||
/// </summary>
|
||||
/// <param name="refreshRate">The refresh rate to be applied.</param>
|
||||
/// <param name="isDeferred">
|
||||
/// A boolean value indicating if the refresh rate override should be deferred to the next OS
|
||||
/// mode-set.
|
||||
/// </param>
|
||||
public void OverrideRefreshRate(float refreshRate, bool isDeferred = false)
|
||||
{
|
||||
DisplayApi.SetRefreshRateOverride(OutputId, refreshRate, isDeferred);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads data from the I2C bus
|
||||
/// </summary>
|
||||
/// <param name="portId">The port id on which device is connected</param>
|
||||
/// <param name="useDDCPort">A boolean value indicating that the DDC port should be used instead of the communication port</param>
|
||||
/// <param name="deviceAddress">The device I2C slave address</param>
|
||||
/// <param name="registerAddress">The target I2C register address</param>
|
||||
/// <param name="readDataLength">The length of the buffer to allocate for the read operation.</param>
|
||||
/// <param name="speed">The target speed of the transaction in kHz</param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes data to the I2C bus
|
||||
/// </summary>
|
||||
/// <param name="portId">The port id on which device is connected</param>
|
||||
/// <param name="useDDCPort">A boolean value indicating that the DDC port should be used instead of the communication port</param>
|
||||
/// <param name="deviceAddress">The device I2C slave address</param>
|
||||
/// <param name="registerAddress">The target I2C register address</param>
|
||||
/// <param name="data">The payload data</param>
|
||||
/// <param name="speed">The target speed of the transaction in kHz</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information regarding the GPU performance control and limitations
|
||||
/// </summary>
|
||||
public class GPUPerformanceControl
|
||||
{
|
||||
internal GPUPerformanceControl(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current active performance limitation
|
||||
/// </summary>
|
||||
public PerformanceLimit CurrentActiveLimit
|
||||
{
|
||||
get => GPUApi.PerformancePoliciesGetStatus(PhysicalGPU.Handle).PerformanceLimit;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current performance decrease reason
|
||||
/// </summary>
|
||||
public PerformanceDecreaseReason CurrentPerformanceDecreaseReason
|
||||
{
|
||||
get => GPUApi.GetPerformanceDecreaseInfo(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if no load limit is supported with this GPU
|
||||
/// </summary>
|
||||
public bool IsNoLoadLimitSupported
|
||||
{
|
||||
get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsNoLoadLimitSupported;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if power limit is supported with this GPU
|
||||
/// </summary>
|
||||
public bool IsPowerLimitSupported
|
||||
{
|
||||
get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsPowerLimitSupported;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if temperature limit is supported with this GPU
|
||||
/// </summary>
|
||||
public bool IsTemperatureLimitSupported
|
||||
{
|
||||
get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsTemperatureLimitSupported;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if voltage limit is supported with this GPU
|
||||
/// </summary>
|
||||
public bool IsVoltageLimitSupported
|
||||
{
|
||||
get => GPUApi.PerformancePoliciesGetInfo(PhysicalGPU.Handle).IsVoltageLimitSupported;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets information regarding possible power limit policies and their acceptable range
|
||||
/// </summary>
|
||||
public IEnumerable<GPUPowerLimitInfo> PowerLimitInformation
|
||||
{
|
||||
get
|
||||
{
|
||||
return GPUApi.ClientPowerPoliciesGetInfo(PhysicalGPU.Handle).PowerPolicyInfoEntries
|
||||
.Select(entry => new GPUPowerLimitInfo(entry));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current active power limit policies
|
||||
/// </summary>
|
||||
public IEnumerable<GPUPowerLimitPolicy> PowerLimitPolicies
|
||||
{
|
||||
get
|
||||
{
|
||||
// TODO: GPUApi.ClientPowerPoliciesSetStatus();
|
||||
return GPUApi.ClientPowerPoliciesGetStatus(PhysicalGPU.Handle).PowerPolicyStatusEntries
|
||||
.Select(entry => new GPUPowerLimitPolicy(entry));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets information regarding possible thermal limit policies and their acceptable range
|
||||
/// </summary>
|
||||
public IEnumerable<GPUThermalLimitInfo> ThermalLimitInformation
|
||||
{
|
||||
get
|
||||
{
|
||||
return GPUApi.GetThermalPoliciesInfo(PhysicalGPU.Handle).ThermalPoliciesInfoEntries
|
||||
.Select(entry => new GPUThermalLimitInfo(entry));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current active thermal limit policies
|
||||
/// </summary>
|
||||
public IEnumerable<GPUThermalLimitPolicy> ThermalLimitPolicies
|
||||
{
|
||||
get
|
||||
{
|
||||
// TODO: GPUApi.SetThermalPoliciesStatus();
|
||||
return GPUApi.GetThermalPoliciesStatus(PhysicalGPU.Handle).ThermalPoliciesStatusEntries
|
||||
.Select(entry => new GPUThermalLimitPolicy(entry));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
using System.Linq;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a performance state
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of clocks associated with this performance state
|
||||
/// </summary>
|
||||
|
||||
public GPUPerformanceStateClock[] Clocks { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this performance state is readonly
|
||||
/// </summary>
|
||||
public bool IsReadOnly { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the PCI-e information regarding this performance state.
|
||||
/// </summary>
|
||||
public PCIeInformation PCIeInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the performance state identification
|
||||
/// </summary>
|
||||
public PerformanceStateId StateId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the state index
|
||||
/// </summary>
|
||||
public int StateIndex { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of voltages associated with this performance state
|
||||
/// </summary>
|
||||
public GPUPerformanceStateVoltage[] Voltages { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
if (IsReadOnly)
|
||||
{
|
||||
return $"{StateId} (ReadOnly)";
|
||||
}
|
||||
|
||||
return StateId.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a performance state clock settings
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the base clock frequency in kHz
|
||||
/// </summary>
|
||||
public GPUPerformanceStateValueRange BaseClockInkHz { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the clock frequency delta in kHz
|
||||
/// </summary>
|
||||
public int ClockDeltaInkHz { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the clock frequency delta range in kHz
|
||||
/// </summary>
|
||||
public GPUPerformanceStateValueRange ClockDeltaRangeInkHz { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the clock domain
|
||||
/// </summary>
|
||||
public PublicClockDomain ClockDomain { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current clock frequency in kHz
|
||||
/// </summary>
|
||||
public GPUPerformanceStateValueRange CurrentClockInkHz { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the dependent voltage domain
|
||||
/// </summary>
|
||||
public PerformanceVoltageDomain DependentVoltageDomain { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the dependent voltage range in uV
|
||||
/// </summary>
|
||||
public GPUPerformanceStateValueRange DependentVoltageRangeInMicroVolt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this clock setting is readonly
|
||||
/// </summary>
|
||||
public bool IsReadOnly { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
var title = IsReadOnly ? $"{ClockDomain} (ReadOnly)" : ClockDomain.ToString();
|
||||
|
||||
return
|
||||
$"{title}: {BaseClockInkHz} + ({ClockDeltaInkHz}) = {CurrentClockInkHz}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an integer value range
|
||||
/// </summary>
|
||||
public class GPUPerformanceStateValueRange : IEquatable<GPUPerformanceStateValueRange>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="GPUPerformanceStateValueRange" />.
|
||||
/// </summary>
|
||||
/// <param name="min">The lower bound of the range.</param>
|
||||
/// <param name="max">The upper bound of the range.</param>
|
||||
public GPUPerformanceStateValueRange(long min, long max)
|
||||
{
|
||||
Minimum = min;
|
||||
Maximum = max;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new single value instance of <see cref="GPUPerformanceStateValueRange" />.
|
||||
/// </summary>
|
||||
/// <param name="value">The only value in the range</param>
|
||||
public GPUPerformanceStateValueRange(long value)
|
||||
{
|
||||
Minimum = value;
|
||||
Maximum = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the upper bound of the inclusive range
|
||||
/// </summary>
|
||||
public long Maximum { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the lower bound of the inclusive range
|
||||
/// </summary>
|
||||
public long Minimum { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(GPUPerformanceStateValueRange other)
|
||||
{
|
||||
if (other == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, other))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Maximum == other.Maximum && Minimum == other.Minimum;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks two instances of <see cref="GPUPerformanceStateValueRange" /> for equality.
|
||||
/// </summary>
|
||||
/// <param name="left">The left side of the comparison.</param>
|
||||
/// <param name="right">The right side of the comparison.</param>
|
||||
/// <returns>true if instances are equal, otherwise false</returns>
|
||||
public static bool operator ==(GPUPerformanceStateValueRange left, GPUPerformanceStateValueRange right)
|
||||
{
|
||||
return Equals(left, right) || left?.Equals(right) == true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks two instances of <see cref="GPUPerformanceStateValueRange" /> for inequality.
|
||||
/// </summary>
|
||||
/// <param name="left">The left side of the comparison.</param>
|
||||
/// <param name="right">The right side of the comparison.</param>
|
||||
/// <returns>true if instances are in-equal, otherwise false</returns>
|
||||
public static bool operator !=(GPUPerformanceStateValueRange left, GPUPerformanceStateValueRange right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, obj))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Equals(obj as GPUPerformanceStateValueRange);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
return ((int) Maximum * 397) ^ (int) Minimum;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
if (Minimum == Maximum)
|
||||
{
|
||||
return $"({Minimum})";
|
||||
}
|
||||
|
||||
return $"[({Minimum}) - ({Maximum})]";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a performance state voltage settings
|
||||
/// </summary>
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the base voltage in uV
|
||||
/// </summary>
|
||||
public int BaseVoltageInMicroVolt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current voltage in uV
|
||||
/// </summary>
|
||||
public uint CurrentVoltageInMicroVolt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this voltage is readonly
|
||||
/// </summary>
|
||||
public bool IsReadOnly { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the voltage delta in uV
|
||||
/// </summary>
|
||||
public int VoltageDeltaInMicroVolt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the voltage delta range in uV
|
||||
/// </summary>
|
||||
public GPUPerformanceStateValueRange VoltageDeltaRangeInMicroVolt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the voltage domain
|
||||
/// </summary>
|
||||
public PerformanceVoltageDomain VoltageDomain { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
var title = IsReadOnly ? $"{VoltageDomain} (ReadOnly)" : VoltageDomain.ToString();
|
||||
|
||||
return
|
||||
$"{title}: ({BaseVoltageInMicroVolt}) + ({VoltageDeltaInMicroVolt}) = ({CurrentVoltageInMicroVolt})";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds the retrieved performance states information
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently active performance state
|
||||
/// </summary>
|
||||
public GPUPerformanceState CurrentPerformanceState { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of global voltage settings
|
||||
/// </summary>
|
||||
public GPUPerformanceStateVoltage[] GlobalVoltages { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if performance states are readonly
|
||||
/// </summary>
|
||||
public bool IsReadOnly { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of all available performance states
|
||||
/// </summary>
|
||||
public GPUPerformanceState[] PerformanceStates { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
if (PerformanceStates.Length == 0)
|
||||
{
|
||||
return "No Performance State Available";
|
||||
}
|
||||
|
||||
return string.Join(
|
||||
", ",
|
||||
PerformanceStates
|
||||
.Select(
|
||||
state =>
|
||||
{
|
||||
var attributes = new List<string>();
|
||||
|
||||
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();
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information regarding a possible power limit policy and its acceptable range
|
||||
/// </summary>
|
||||
public class GPUPowerLimitInfo
|
||||
{
|
||||
internal GPUPowerLimitInfo(PrivatePowerPoliciesInfoV1.PowerPolicyInfoEntry powerPolicyInfoEntry)
|
||||
{
|
||||
PerformanceStateId = powerPolicyInfoEntry.PerformanceStateId;
|
||||
MinimumPowerInPCM = powerPolicyInfoEntry.MinimumPowerInPCM;
|
||||
DefaultPowerInPCM = powerPolicyInfoEntry.DefaultPowerInPCM;
|
||||
MaximumPowerInPCM = powerPolicyInfoEntry.MaximumPowerInPCM;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default policy target power in per cent mille (PCM)
|
||||
/// </summary>
|
||||
public uint DefaultPowerInPCM { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default policy target power in percentage
|
||||
/// </summary>
|
||||
public float DefaultPowerInPercent
|
||||
{
|
||||
get => DefaultPowerInPCM / 1000f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum possible policy target power in per cent mille (PCM)
|
||||
/// </summary>
|
||||
public uint MaximumPowerInPCM { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum possible policy target power in percentage
|
||||
/// </summary>
|
||||
public float MaximumPowerInPercent
|
||||
{
|
||||
get => MaximumPowerInPCM / 1000f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the minimum possible policy target power in per cent mille (PCM)
|
||||
/// </summary>
|
||||
public uint MinimumPowerInPCM { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the minimum possible policy target power in percentage
|
||||
/// </summary>
|
||||
public float MinimumPowerInPercent
|
||||
{
|
||||
get => MinimumPowerInPCM / 1000f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding performance state identification
|
||||
/// </summary>
|
||||
public PerformanceStateId PerformanceStateId { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return
|
||||
$"[{PerformanceStateId}] Default: {DefaultPowerInPercent}% - Range: ({MinimumPowerInPercent}% - {MaximumPowerInPercent}%)";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information regarding a currently active power limit policy
|
||||
/// </summary>
|
||||
public class GPUPowerLimitPolicy
|
||||
{
|
||||
internal GPUPowerLimitPolicy(PrivatePowerPoliciesStatusV1.PowerPolicyStatusEntry powerPolicyStatusEntry)
|
||||
{
|
||||
PerformanceStateId = powerPolicyStatusEntry.PerformanceStateId;
|
||||
PowerTargetInPCM = powerPolicyStatusEntry.PowerTargetInPCM;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding performance state identification
|
||||
/// </summary>
|
||||
public PerformanceStateId PerformanceStateId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current policy target power in per cent mille (PCM)
|
||||
/// </summary>
|
||||
public uint PowerTargetInPCM { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current policy target power in percentage
|
||||
/// </summary>
|
||||
public float PowerTargetInPercent
|
||||
{
|
||||
get => PowerTargetInPCM / 1000f;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{PerformanceStateId} Target: {PowerTargetInPercent}%";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NvAPIWrapper.Native;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information regarding current power topology and their current power usage
|
||||
/// </summary>
|
||||
public class GPUPowerTopologyInformation
|
||||
{
|
||||
internal GPUPowerTopologyInformation(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current power topology entries
|
||||
/// </summary>
|
||||
public IEnumerable<GPUPowerTopologyStatus> PowerTopologyEntries
|
||||
{
|
||||
get
|
||||
{
|
||||
return GPUApi.ClientPowerTopologyGetStatus(PhysicalGPU.Handle).PowerPolicyStatusEntries
|
||||
.Select(entry => new GPUPowerTopologyStatus(entry));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about a power domain usage
|
||||
/// </summary>
|
||||
public class GPUPowerTopologyStatus
|
||||
{
|
||||
internal GPUPowerTopologyStatus(
|
||||
PrivatePowerTopologiesStatusV1.PowerTopologiesStatusEntry powerTopologiesStatusEntry)
|
||||
{
|
||||
Domain = powerTopologiesStatusEntry.Domain;
|
||||
PowerUsageInPCM = powerTopologiesStatusEntry.PowerUsageInPCM;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the power usage domain
|
||||
/// </summary>
|
||||
public PowerTopologyDomain Domain { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current power usage in per cent mille (PCM)
|
||||
/// </summary>
|
||||
public uint PowerUsageInPCM { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current power usage in percentage
|
||||
/// </summary>
|
||||
public float PowerUsageInPercent
|
||||
{
|
||||
get => PowerUsageInPCM / 1000f;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"[{Domain}] {PowerUsageInPercent}%";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NvAPIWrapper.Native;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information regarding the available thermal sensors and current thermal level of a GPU
|
||||
/// </summary>
|
||||
public class GPUThermalInformation
|
||||
{
|
||||
internal GPUThermalInformation(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current thermal level of the GPU
|
||||
/// </summary>
|
||||
public int CurrentThermalLevel
|
||||
{
|
||||
get => (int) GPUApi.GetCurrentThermalLevel(PhysicalGPU.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of available thermal sensors
|
||||
/// </summary>
|
||||
public IEnumerable<GPUThermalSensor> ThermalSensors
|
||||
{
|
||||
get
|
||||
{
|
||||
return GPUApi.GetThermalSettings(PhysicalGPU.Handle).Sensors
|
||||
.Select((sensor, i) => new GPUThermalSensor(i, sensor));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information regarding a possible thermal limit policy and its acceptable range
|
||||
/// </summary>
|
||||
public class GPUThermalLimitInfo
|
||||
{
|
||||
internal GPUThermalLimitInfo(PrivateThermalPoliciesInfoV2.ThermalPoliciesInfoEntry policiesInfoEntry)
|
||||
{
|
||||
Controller = policiesInfoEntry.Controller;
|
||||
MinimumTemperature = policiesInfoEntry.MinimumTemperature;
|
||||
DefaultTemperature = policiesInfoEntry.DefaultTemperature;
|
||||
MaximumTemperature = policiesInfoEntry.MaximumTemperature;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the policy's thermal controller
|
||||
/// </summary>
|
||||
public ThermalController Controller { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default policy target temperature in degree Celsius
|
||||
/// </summary>
|
||||
public int DefaultTemperature { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum possible policy target temperature in degree Celsius
|
||||
/// </summary>
|
||||
public int MaximumTemperature { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the minimum possible policy target temperature in degree Celsius
|
||||
/// </summary>
|
||||
public int MinimumTemperature { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return
|
||||
$"[{Controller}] Default: {DefaultTemperature}°C - Range: ({MinimumTemperature}°C - {MaximumTemperature}°C)";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information regarding a currently active temperature limit policy
|
||||
/// </summary>
|
||||
public class GPUThermalLimitPolicy
|
||||
{
|
||||
internal GPUThermalLimitPolicy(PrivateThermalPoliciesStatusV2.ThermalPoliciesStatusEntry thermalPoliciesEntry)
|
||||
{
|
||||
Controller = thermalPoliciesEntry.Controller;
|
||||
PerformanceStateId = thermalPoliciesEntry.PerformanceStateId;
|
||||
TargetTemperature = thermalPoliciesEntry.TargetTemperature;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the policy's thermal controller
|
||||
/// </summary>
|
||||
public ThermalController Controller { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding performance state identification
|
||||
/// </summary>
|
||||
public PerformanceStateId PerformanceStateId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current policy target temperature in degree Celsius
|
||||
/// </summary>
|
||||
public int TargetTemperature { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return
|
||||
$"{PerformanceStateId} [{Controller}] Target: {TargetTemperature}°C";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a thermal sensor
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the sensor identification number or index
|
||||
/// </summary>
|
||||
public int SensorId { get; set; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ThermalController Controller { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public int CurrentTemperature { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public int DefaultMaximumTemperature { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public int DefaultMinimumTemperature { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ThermalSettingsTarget Target { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return
|
||||
$"[{Target} @ {Controller}] Current: {CurrentTemperature}°C - Default Range: [({DefaultMinimumTemperature}°C) , ({DefaultMaximumTemperature}°C)]";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information about a utilization domain
|
||||
/// </summary>
|
||||
public class GPUUsageDomainStatus
|
||||
{
|
||||
internal GPUUsageDomainStatus(UtilizationDomain domain, IUtilizationDomainInfo utilizationDomainInfo)
|
||||
{
|
||||
Domain = domain;
|
||||
Percentage = (int) utilizationDomainInfo.Percentage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the utilization domain that this instance describes
|
||||
/// </summary>
|
||||
public UtilizationDomain Domain { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the percentage of time where the domain is considered busy in the last 1 second interval.
|
||||
/// </summary>
|
||||
public int Percentage { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"[{Domain}] {Percentage}%";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds information about the GPU utilization domains
|
||||
/// </summary>
|
||||
public class GPUUsageInformation
|
||||
{
|
||||
internal GPUUsageInformation(PhysicalGPU physicalGPU)
|
||||
{
|
||||
PhysicalGPU = physicalGPU;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Bus interface (BUS) utilization
|
||||
/// </summary>
|
||||
public GPUUsageDomainStatus BusInterface
|
||||
{
|
||||
get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.BusInterface);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the frame buffer (FB) utilization
|
||||
/// </summary>
|
||||
public GPUUsageDomainStatus FrameBuffer
|
||||
{
|
||||
get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.FrameBuffer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the graphic engine (GPU) utilization
|
||||
/// </summary>
|
||||
public GPUUsageDomainStatus GPU
|
||||
{
|
||||
get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.GPU);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if the dynamic performance states is enabled
|
||||
/// </summary>
|
||||
public bool IsDynamicPerformanceStatesEnabled
|
||||
{
|
||||
get => GPUApi.GetDynamicPerformanceStatesInfoEx(PhysicalGPU.Handle).IsDynamicPerformanceStatesEnabled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU that this instance describes
|
||||
/// </summary>
|
||||
public PhysicalGPU PhysicalGPU { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets all valid utilization domains and information
|
||||
/// </summary>
|
||||
public IEnumerable<GPUUsageDomainStatus> 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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Video engine (VID) utilization
|
||||
/// </summary>
|
||||
public GPUUsageDomainStatus VideoEngine
|
||||
{
|
||||
get => UtilizationDomainsStatus.FirstOrDefault(status => status.Domain == UtilizationDomain.VideoEngine);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables dynamic performance states
|
||||
/// </summary>
|
||||
public void EnableDynamicPerformanceStates()
|
||||
{
|
||||
GPUApi.EnableDynamicPStates(PhysicalGPU.Handle);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,119 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a logical NVIDIA GPU
|
||||
/// </summary>
|
||||
public class LogicalGPU : IEquatable<LogicalGPU>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new LogicalGPU
|
||||
/// </summary>
|
||||
/// <param name="handle">Logical GPU handle</param>
|
||||
public LogicalGPU(LogicalGPUHandle handle)
|
||||
{
|
||||
Handle = handle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of all corresponding physical GPUs
|
||||
/// </summary>
|
||||
public PhysicalGPU[] CorrespondingPhysicalGPUs
|
||||
{
|
||||
get
|
||||
{
|
||||
return GPUApi.GetPhysicalGPUsFromLogicalGPU(Handle).Select(handle => new PhysicalGPU(handle)).ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the logical GPU handle
|
||||
/// </summary>
|
||||
public LogicalGPUHandle Handle { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(LogicalGPU other)
|
||||
{
|
||||
if (ReferenceEquals(null, other))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, other))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Handle.Equals(other.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all logical GPUs
|
||||
/// </summary>
|
||||
/// <returns>An array of logical GPUs</returns>
|
||||
public static LogicalGPU[] GetLogicalGPUs()
|
||||
{
|
||||
return GPUApi.EnumLogicalGPUs().Select(handle => new LogicalGPU(handle)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(LogicalGPU left, LogicalGPU right)
|
||||
{
|
||||
return right?.Equals(left) ?? ReferenceEquals(left, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(LogicalGPU left, LogicalGPU right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Handle.GetHashCode();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return
|
||||
$"Logical GPU [{CorrespondingPhysicalGPUs.Length}] {{{string.Join(", ", CorrespondingPhysicalGPUs.Select(gpu => gpu.FullName).ToArray())}}}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about the PCI connection
|
||||
/// </summary>
|
||||
public class PCIIdentifiers : IEquatable<PCIIdentifiers>
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the internal PCI device identifier
|
||||
/// </summary>
|
||||
public uint DeviceId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the external PCI device identifier
|
||||
/// </summary>
|
||||
public ushort ExternalDeviceId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the internal PCI device-specific revision identifier
|
||||
/// </summary>
|
||||
public uint RevisionId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the internal PCI subsystem identifier
|
||||
/// </summary>
|
||||
public uint SubSystemId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the vendor identification calculated from internal device identification
|
||||
/// </summary>
|
||||
public ushort VendorId { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(PCIIdentifiers other)
|
||||
{
|
||||
return DeviceId == other.DeviceId &&
|
||||
SubSystemId == other.SubSystemId &&
|
||||
RevisionId == other.RevisionId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(PCIIdentifiers left, PCIIdentifiers right)
|
||||
{
|
||||
return left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(PCIIdentifiers left, PCIIdentifiers right)
|
||||
{
|
||||
return !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return obj is PCIIdentifiers identifiers && Equals(identifiers);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
var hashCode = (int) DeviceId;
|
||||
hashCode = (hashCode * 397) ^ (int) SubSystemId;
|
||||
hashCode = (hashCode * 397) ^ (int) RevisionId;
|
||||
|
||||
return hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"PCI\\VEN_{VendorId:X}&DEV_{ExternalDeviceId:X}&SUBSYS_{SubSystemId:X}&REV_{RevisionId:X}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about the PCI-e connection
|
||||
/// </summary>
|
||||
public class PCIeInformation
|
||||
{
|
||||
internal PCIeInformation(PrivatePCIeInfoV2.PCIePerformanceStateInfo stateInfo)
|
||||
{
|
||||
TransferRateInMTps = stateInfo.TransferRateInMTps;
|
||||
Generation = stateInfo.Generation;
|
||||
Lanes = stateInfo.Lanes;
|
||||
Version = stateInfo.Version;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the PCI-e generation
|
||||
/// </summary>
|
||||
public PCIeGeneration Generation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the PCI-e down stream lanes
|
||||
/// </summary>
|
||||
public uint Lanes { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the PCIe transfer rate in Mega Transfers per Second
|
||||
/// </summary>
|
||||
public uint TransferRateInMTps { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the PCI-e version
|
||||
/// </summary>
|
||||
public PCIeGeneration Version { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
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";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a physical NVIDIA GPU
|
||||
/// </summary>
|
||||
public class PhysicalGPU : IEquatable<PhysicalGPU>
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new PhysicalGPU
|
||||
/// </summary>
|
||||
/// <param name="handle">Physical GPU handle</param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all active outputs of this GPU
|
||||
/// </summary>
|
||||
public GPUOutput[] ActiveOutputs
|
||||
{
|
||||
get
|
||||
{
|
||||
var outputs = new List<GPUOutput>();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU architect information
|
||||
/// </summary>
|
||||
public GPUArchitectInformation ArchitectInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU base clock frequencies
|
||||
/// </summary>
|
||||
public IClockFrequencies BaseClockFrequencies
|
||||
{
|
||||
get => GPUApi.GetAllClockFrequencies(Handle, new ClockFrequenciesV2(ClockType.BaseClock));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU video BIOS information
|
||||
/// </summary>
|
||||
public VideoBIOS Bios
|
||||
{
|
||||
get => new VideoBIOS(
|
||||
GPUApi.GetVBIOSRevision(Handle),
|
||||
(int) GPUApi.GetVBIOSOEMRevision(Handle),
|
||||
GPUApi.GetVBIOSVersionString(Handle)
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the board information
|
||||
/// </summary>
|
||||
public BoardInfo Board
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
return GPUApi.GetBoardInfo(Handle);
|
||||
}
|
||||
catch (NVIDIAApiException ex)
|
||||
{
|
||||
if (ex.Status == Status.NotSupported)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU boost clock frequencies
|
||||
/// </summary>
|
||||
public IClockFrequencies BoostClockFrequencies
|
||||
{
|
||||
get => GPUApi.GetAllClockFrequencies(Handle, new ClockFrequenciesV2(ClockType.BoostClock));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU bus information
|
||||
/// </summary>
|
||||
public GPUBusInformation BusInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU coolers information
|
||||
/// </summary>
|
||||
public GPUCoolerInformation CoolerInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets corresponding logical GPU
|
||||
/// </summary>
|
||||
public LogicalGPU CorrespondingLogicalGPU
|
||||
{
|
||||
get => new LogicalGPU(GPUApi.GetLogicalGPUFromPhysicalGPU(Handle));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU current clock frequencies
|
||||
/// </summary>
|
||||
public IClockFrequencies CurrentClockFrequencies
|
||||
{
|
||||
get => GPUApi.GetAllClockFrequencies(Handle, new ClockFrequenciesV2(ClockType.CurrentClock));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the driver model number for this GPU
|
||||
/// </summary>
|
||||
public uint DriverModel
|
||||
{
|
||||
get => GPUApi.GetDriverModel(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU ECC memory information
|
||||
/// </summary>
|
||||
public ECCMemoryInformation ECCMemoryInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the chipset foundry
|
||||
/// </summary>
|
||||
public GPUFoundry Foundry
|
||||
{
|
||||
get => GPUApi.GetFoundry(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU full name
|
||||
/// </summary>
|
||||
public string FullName
|
||||
{
|
||||
get => GPUApi.GetFullName(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GPU identification number
|
||||
/// </summary>
|
||||
public uint GPUId
|
||||
{
|
||||
get => GPUApi.GetGPUIDFromPhysicalGPU(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU type
|
||||
/// </summary>
|
||||
public GPUType GPUType
|
||||
{
|
||||
get => GPUApi.GetGPUType(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical GPU handle
|
||||
/// </summary>
|
||||
public PhysicalGPUHandle Handle { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating the Quadro line of products
|
||||
/// </summary>
|
||||
public bool IsQuadro
|
||||
{
|
||||
get => GPUApi.GetQuadroStatus(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU memory and RAM information as well as frame-buffer information
|
||||
/// </summary>
|
||||
public GPUMemoryInformation MemoryInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU performance control status and configurations
|
||||
/// </summary>
|
||||
public GPUPerformanceControl PerformanceControl { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GPU performance states information and configurations
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU coolers information
|
||||
/// </summary>
|
||||
public GPUPowerTopologyInformation PowerTopologyInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU system type
|
||||
/// </summary>
|
||||
public SystemType SystemType
|
||||
{
|
||||
get => GPUApi.GetSystemType(Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets GPU thermal sensors information
|
||||
/// </summary>
|
||||
public GPUThermalInformation ThermalInformation { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GPU utilization domains and usages
|
||||
/// </summary>
|
||||
public GPUUsageInformation UsageInformation { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(PhysicalGPU other)
|
||||
{
|
||||
if (other == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, other))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Handle.Equals(other.Handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the corresponding <see cref="PhysicalGPU" /> instance from a GPU identification number.
|
||||
/// </summary>
|
||||
/// <param name="gpuId">The GPU identification number.</param>
|
||||
/// <returns>An instance of <see cref="PhysicalGPU" /> or <see langword="null" /> if operation failed.</returns>
|
||||
public static PhysicalGPU FromGPUId(uint gpuId)
|
||||
{
|
||||
var handle = GPUApi.GetPhysicalGPUFromGPUID(gpuId);
|
||||
|
||||
if (handle.IsNull)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new PhysicalGPU(handle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all physical GPUs
|
||||
/// </summary>
|
||||
/// <returns>An array of physical GPUs</returns>
|
||||
public static PhysicalGPU[] GetPhysicalGPUs()
|
||||
{
|
||||
return GPUApi.EnumPhysicalGPUs().Select(handle => new PhysicalGPU(handle)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all physical GPUs in TCC state
|
||||
/// </summary>
|
||||
/// <returns>An array of physical GPUs</returns>
|
||||
public static PhysicalGPU[] GetTCCPhysicalGPUs()
|
||||
{
|
||||
return GPUApi.EnumTCCPhysicalGPUs().Select(handle => new PhysicalGPU(handle)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(PhysicalGPU left, PhysicalGPU right)
|
||||
{
|
||||
return Equals(left, right) || left?.Equals(right) == true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(PhysicalGPU left, PhysicalGPU right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ReferenceEquals(this, obj))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return Equals(obj as PhysicalGPU);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Handle.GetHashCode();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return FullName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a list of all active applications for this GPU
|
||||
/// </summary>
|
||||
/// <returns>An array of processes</returns>
|
||||
public Process[] GetActiveApplications()
|
||||
{
|
||||
return GPUApi.QueryActiveApps(Handle).Select(app => Process.GetProcessById(app.ProcessId)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a list of all connected display devices on this GPU
|
||||
/// </summary>
|
||||
/// <param name="flags">ConnectedIdsFlag flag</param>
|
||||
/// <returns>An array of display devices</returns>
|
||||
public DisplayDevice[] GetConnectedDisplayDevices(ConnectedIdsFlag flags)
|
||||
{
|
||||
return GPUApi.GetConnectedDisplayIds(Handle, flags).Select(display => new DisplayDevice(display)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the display device connected to a specific GPU output
|
||||
/// </summary>
|
||||
/// <param name="output">The GPU output to get connected display device for</param>
|
||||
/// <returns>DisplayDevice connected to the specified GPU output</returns>
|
||||
public DisplayDevice GetDisplayDeviceByOutput(GPUOutput output)
|
||||
{
|
||||
return new DisplayDevice(GPUApi.GetDisplayIdFromGPUAndOutputId(Handle, output.OutputId));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a list of all display devices on any possible output
|
||||
/// </summary>
|
||||
/// <returns>An array of display devices</returns>
|
||||
public DisplayDevice[] GetDisplayDevices()
|
||||
{
|
||||
return GPUApi.GetAllDisplayIds(Handle).Select(display => new DisplayDevice(display)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads EDID data of an output
|
||||
/// </summary>
|
||||
/// <param name="output">The GPU output to read EDID information for</param>
|
||||
/// <returns>A byte array containing EDID data</returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads data from the I2C bus
|
||||
/// </summary>
|
||||
/// <param name="i2cInfo">Information required to read from the I2C bus.</param>
|
||||
/// <returns>The returned payload.</returns>
|
||||
// ReSharper disable once InconsistentNaming
|
||||
public byte[] ReadI2C(II2CInfo i2cInfo)
|
||||
{
|
||||
GPUApi.I2CRead(Handle, ref i2cInfo);
|
||||
|
||||
return i2cInfo.Data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates a set of GPU outputs to check if they can be active simultaneously
|
||||
/// </summary>
|
||||
/// <param name="outputs">GPU outputs to check</param>
|
||||
/// <returns>true if all specified outputs can be active simultaneously, otherwise false</returns>
|
||||
public bool ValidateOutputCombination(GPUOutput[] outputs)
|
||||
{
|
||||
var gpuOutpudIds =
|
||||
outputs.Aggregate(OutputId.Invalid, (current, gpuOutput) => current | gpuOutput.OutputId);
|
||||
|
||||
return GPUApi.ValidateOutputCombination(Handle, gpuOutpudIds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes EDID data of an output
|
||||
/// </summary>
|
||||
/// <param name="output">The GPU output to write EDID information for</param>
|
||||
/// <param name="edidData">A byte array containing EDID data</param>
|
||||
public void WriteEDIDData(GPUOutput output, byte[] edidData)
|
||||
{
|
||||
WriteEDIDData((uint) output.OutputId, edidData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes EDID data of an display
|
||||
/// </summary>
|
||||
/// <param name="display">The display device to write EDID information for</param>
|
||||
/// <param name="edidData">A byte array containing EDID data</param>
|
||||
public void WriteEDIDData(DisplayDevice display, byte[] edidData)
|
||||
{
|
||||
WriteEDIDData(display.DisplayId, edidData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes data to the I2C bus
|
||||
/// </summary>
|
||||
/// <param name="i2cInfo">Information required to write to the I2C bus including data payload.</param>
|
||||
// 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<EDIDV3>();
|
||||
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<EDIDV2>();
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NvAPIWrapper.GPU
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about the GPU Video BIOS
|
||||
/// </summary>
|
||||
public class VideoBIOS
|
||||
{
|
||||
internal VideoBIOS(uint revision, int oemRevision, string versionString)
|
||||
{
|
||||
Revision = revision;
|
||||
OEMRevision = oemRevision;
|
||||
VersionString = versionString.ToUpper();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the the OEM revision of the video BIOS
|
||||
/// </summary>
|
||||
public int OEMRevision { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the revision of the video BIOS
|
||||
/// </summary>
|
||||
public uint Revision { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the full video BIOS version string
|
||||
/// </summary>
|
||||
public string VersionString { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return AsVersion().ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the video BIOS version as a .Net Version object
|
||||
/// </summary>
|
||||
/// <returns>A Version object representing the video BIOS version</returns>
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB |
@@ -1,81 +0,0 @@
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.General.Structures;
|
||||
using NvAPIWrapper.Native.Interfaces.General;
|
||||
|
||||
namespace NvAPIWrapper
|
||||
{
|
||||
/// <summary>
|
||||
/// .Net friendly version of system and general functions of NVAPI library
|
||||
/// </summary>
|
||||
public static class NVIDIA
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets information about the system's chipset.
|
||||
/// </summary>
|
||||
public static IChipsetInfo ChipsetInfo
|
||||
{
|
||||
get => GeneralApi.GetChipsetInfo();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets NVIDIA driver branch version as string
|
||||
/// </summary>
|
||||
public static string DriverBranchVersion
|
||||
{
|
||||
get
|
||||
{
|
||||
GeneralApi.GetDriverAndBranchVersion(out var branchVersion);
|
||||
|
||||
return branchVersion;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets NVIDIA driver version
|
||||
/// </summary>
|
||||
public static uint DriverVersion
|
||||
{
|
||||
get => GeneralApi.GetDriverAndBranchVersion(out _);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets NVAPI interface version as string
|
||||
/// </summary>
|
||||
public static string InterfaceVersionString
|
||||
{
|
||||
get => GeneralApi.GetInterfaceVersionString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current lid and dock information.
|
||||
/// </summary>
|
||||
public static LidDockParameters LidAndDockParameters
|
||||
{
|
||||
get => GeneralApi.GetLidAndDockInfo();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the NvAPI library (if not already initialized) but always increments the ref-counter.
|
||||
/// </summary>
|
||||
public static void Initialize()
|
||||
{
|
||||
GeneralApi.Initialize();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PRIVATE - Requests to restart the display driver
|
||||
/// </summary>
|
||||
public static void RestartDisplayDriver()
|
||||
{
|
||||
GeneralApi.RestartDisplayDriver();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Decrements the ref-counter and when it reaches ZERO, unloads NVAPI library.
|
||||
/// </summary>
|
||||
public static void Unload()
|
||||
{
|
||||
GeneralApi.Unload();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Constants
|
||||
{
|
||||
internal static class Display
|
||||
{
|
||||
public const int AdvancedDisplayHeads = 4;
|
||||
public const int MaxDisplayHeads = 2;
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Constants
|
||||
{
|
||||
internal static class General
|
||||
{
|
||||
public const int BinaryDataMax = 4096;
|
||||
public const int UnicodeStringLength = 2048;
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.DRS
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds possible values for the setting location
|
||||
/// </summary>
|
||||
public enum DRSSettingLocation : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Setting is part of the current profile
|
||||
/// </summary>
|
||||
CurrentProfile = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Setting is part of the global profile
|
||||
/// </summary>
|
||||
GlobalProfile,
|
||||
|
||||
/// <summary>
|
||||
/// Setting is part of the base profile
|
||||
/// </summary>
|
||||
BaseProfile,
|
||||
|
||||
/// <summary>
|
||||
/// Setting is part of the default profile
|
||||
/// </summary>
|
||||
DefaultProfile
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.DRS
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds a list of possible setting value types
|
||||
/// </summary>
|
||||
public enum DRSSettingType : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Integer value type
|
||||
/// </summary>
|
||||
Integer = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Binary value type
|
||||
/// </summary>
|
||||
Binary,
|
||||
|
||||
/// <summary>
|
||||
/// ASCII string value type
|
||||
/// </summary>
|
||||
String,
|
||||
|
||||
/// <summary>
|
||||
/// Unicode string value type
|
||||
/// </summary>
|
||||
UnicodeString
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <inheritdoc cref="IDRSApplication" />
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSApplicationV1" />
|
||||
/// </summary>
|
||||
/// <param name="applicationName">The application file name.</param>
|
||||
/// <param name="friendlyName">The application friendly name.</param>
|
||||
/// <param name="launcherName">The application launcher name.</param>
|
||||
public DRSApplicationV1(
|
||||
string applicationName,
|
||||
string friendlyName = null,
|
||||
string launcherName = null
|
||||
)
|
||||
{
|
||||
this = typeof(DRSApplicationV1).Instantiate<DRSApplicationV1>();
|
||||
IsPredefined = false;
|
||||
ApplicationName = applicationName;
|
||||
FriendlyName = friendlyName ?? string.Empty;
|
||||
LauncherName = launcherName ?? string.Empty;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsPredefined
|
||||
{
|
||||
get => _IsPredefined > 0;
|
||||
private set => _IsPredefined = value ? 1u : 0u;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string FriendlyName
|
||||
{
|
||||
get => _FriendlyName.Value;
|
||||
private set => _FriendlyName = new UnicodeString(value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string LauncherName
|
||||
{
|
||||
get => _LauncherName.Value;
|
||||
private set => _LauncherName = new UnicodeString(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <inheritdoc cref="IDRSApplication" />
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSApplicationV2" />
|
||||
/// </summary>
|
||||
/// <param name="applicationName">The application file name.</param>
|
||||
/// <param name="friendlyName">The application friendly name.</param>
|
||||
/// <param name="launcherName">The application launcher name.</param>
|
||||
/// <param name="fileInFolders">The list of files that are necessary to be present in the application parent directory.</param>
|
||||
// ReSharper disable once TooManyDependencies
|
||||
public DRSApplicationV2(
|
||||
string applicationName,
|
||||
string friendlyName = null,
|
||||
string launcherName = null,
|
||||
string[] fileInFolders = null
|
||||
)
|
||||
{
|
||||
this = typeof(DRSApplicationV2).Instantiate<DRSApplicationV2>();
|
||||
IsPredefined = false;
|
||||
ApplicationName = applicationName;
|
||||
FriendlyName = friendlyName ?? string.Empty;
|
||||
LauncherName = launcherName ?? string.Empty;
|
||||
FilesInFolder = fileInFolders ?? new string[0];
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsPredefined
|
||||
{
|
||||
get => _IsPredefined > 0;
|
||||
private set => _IsPredefined = value ? 1u : 0u;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string FriendlyName
|
||||
{
|
||||
get => _FriendlyName.Value;
|
||||
private set => _FriendlyName = new UnicodeString(value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string LauncherName
|
||||
{
|
||||
get => _LauncherName.Value;
|
||||
private set => _LauncherName = new UnicodeString(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of files that are necessary to be present in the application parent directory.
|
||||
/// </summary>
|
||||
public string[] FilesInFolder
|
||||
{
|
||||
get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
|
||||
new string[0];
|
||||
private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <inheritdoc cref="IDRSApplication" />
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSApplicationV3" />
|
||||
/// </summary>
|
||||
/// <param name="applicationName">The application file name.</param>
|
||||
/// <param name="friendlyName">The application friendly name.</param>
|
||||
/// <param name="launcherName">The application launcher name.</param>
|
||||
/// <param name="fileInFolders">The list of files that are necessary to be present in the application parent directory.</param>
|
||||
/// <param name="isMetro">A boolean value indicating if this application is a metro application.</param>
|
||||
// ReSharper disable once TooManyDependencies
|
||||
public DRSApplicationV3(
|
||||
string applicationName,
|
||||
string friendlyName = null,
|
||||
string launcherName = null,
|
||||
string[] fileInFolders = null,
|
||||
bool isMetro = false
|
||||
)
|
||||
{
|
||||
this = typeof(DRSApplicationV3).Instantiate<DRSApplicationV3>();
|
||||
IsPredefined = false;
|
||||
ApplicationName = applicationName;
|
||||
FriendlyName = friendlyName ?? string.Empty;
|
||||
LauncherName = launcherName ?? string.Empty;
|
||||
FilesInFolder = fileInFolders ?? new string[0];
|
||||
IsMetroApplication = isMetro;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsPredefined
|
||||
{
|
||||
get => _IsPredefined > 0;
|
||||
private set => _IsPredefined = value ? 1u : 0u;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this application is a metro application
|
||||
/// </summary>
|
||||
public bool IsMetroApplication
|
||||
{
|
||||
get => _Flags.GetBit(0);
|
||||
private set => _Flags = _Flags.SetBit(0, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this application has command line arguments
|
||||
/// </summary>
|
||||
public bool HasCommandLine
|
||||
{
|
||||
get => _Flags.GetBit(1);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string FriendlyName
|
||||
{
|
||||
get => _FriendlyName.Value;
|
||||
private set => _FriendlyName = new UnicodeString(value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string LauncherName
|
||||
{
|
||||
get => _LauncherName.Value;
|
||||
private set => _LauncherName = new UnicodeString(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of files that are necessary to be present in the application parent directory.
|
||||
/// </summary>
|
||||
public string[] FilesInFolder
|
||||
{
|
||||
get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
|
||||
new string[0];
|
||||
private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <inheritdoc cref="IDRSApplication" />
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSApplicationV4" />
|
||||
/// </summary>
|
||||
/// <param name="applicationName">The application file name.</param>
|
||||
/// <param name="friendlyName">The application friendly name.</param>
|
||||
/// <param name="launcherName">The application launcher name.</param>
|
||||
/// <param name="fileInFolders">The list of files that are necessary to be present in the application parent directory.</param>
|
||||
/// <param name="isMetro">A boolean value indicating if this application is a metro application.</param>
|
||||
/// <param name="commandLine">The application's command line arguments.</param>
|
||||
// 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<DRSApplicationV4>();
|
||||
IsPredefined = false;
|
||||
ApplicationName = applicationName;
|
||||
FriendlyName = friendlyName ?? string.Empty;
|
||||
LauncherName = launcherName ?? string.Empty;
|
||||
FilesInFolder = fileInFolders ?? new string[0];
|
||||
IsMetroApplication = isMetro;
|
||||
ApplicationCommandLine = commandLine ?? string.Empty;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsPredefined
|
||||
{
|
||||
get => _IsPredefined > 0;
|
||||
private set => _IsPredefined = value ? 1u : 0u;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this application is a metro application
|
||||
/// </summary>
|
||||
public bool IsMetroApplication
|
||||
{
|
||||
get => _Flags.GetBit(0);
|
||||
private set => _Flags = _Flags.SetBit(0, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this application has command line arguments
|
||||
/// </summary>
|
||||
public bool HasCommandLine
|
||||
{
|
||||
get => _Flags.GetBit(1);
|
||||
private set => _Flags = _Flags.SetBit(1, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the application command line arguments
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string FriendlyName
|
||||
{
|
||||
get => _FriendlyName.Value;
|
||||
private set => _FriendlyName = new UnicodeString(value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string LauncherName
|
||||
{
|
||||
get => _LauncherName.Value;
|
||||
private set => _LauncherName = new UnicodeString(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of files that are necessary to be present in the application parent directory.
|
||||
/// </summary>
|
||||
public string[] FilesInFolder
|
||||
{
|
||||
get => _FileInFolder.Value?.Split(new[] {FileInFolderSeparator}, StringSplitOptions.RemoveEmptyEntries) ??
|
||||
new string[0];
|
||||
private set => _FileInFolder = new UnicodeString(string.Join(FileInFolderSeparator.ToString(), value));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
|
||||
namespace NvAPIWrapper.Native.DRS.Structures
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains a list of supported GPU series by a NVIDIA driver setting profile
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 8)]
|
||||
public struct DRSGPUSupport
|
||||
{
|
||||
internal uint _Flags;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating if the GeForce line of products are supported
|
||||
/// </summary>
|
||||
public bool IsGeForceSupported
|
||||
{
|
||||
get => _Flags.GetBit(0);
|
||||
set => _Flags = _Flags.SetBit(0, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating if the Quadro line of products are supported
|
||||
/// </summary>
|
||||
public bool IsQuadroSupported
|
||||
{
|
||||
get => _Flags.GetBit(1);
|
||||
set => _Flags = _Flags.SetBit(1, value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating if the NVS line of products are supported
|
||||
/// </summary>
|
||||
public bool IsNVSSupported
|
||||
{
|
||||
get => _Flags.GetBit(2);
|
||||
set => _Flags = _Flags.SetBit(2, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
var supportedGPUs = new List<string>();
|
||||
|
||||
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}]";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Interfaces;
|
||||
|
||||
namespace NvAPIWrapper.Native.DRS.Structures
|
||||
{
|
||||
/// <summary>
|
||||
/// DRSProfileHandle is a reference to a DRS profile.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DRSProfileHandle : IHandle, IEquatable<DRSProfileHandle>
|
||||
{
|
||||
internal readonly IntPtr _MemoryAddress;
|
||||
|
||||
private DRSProfileHandle(IntPtr memoryAddress)
|
||||
{
|
||||
_MemoryAddress = memoryAddress;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(DRSProfileHandle other)
|
||||
{
|
||||
return _MemoryAddress.Equals(other._MemoryAddress);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return obj is DRSProfileHandle handle && Equals(handle);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return _MemoryAddress.GetHashCode();
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"DRSProfileHandle #{MemoryAddress.ToInt64()}";
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IntPtr MemoryAddress
|
||||
{
|
||||
get => _MemoryAddress;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsNull
|
||||
{
|
||||
get => _MemoryAddress == IntPtr.Zero;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(DRSProfileHandle left, DRSProfileHandle right)
|
||||
{
|
||||
return left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(DRSProfileHandle left, DRSProfileHandle right)
|
||||
{
|
||||
return !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets default DRSProfileHandle with a null pointer
|
||||
/// </summary>
|
||||
public static DRSProfileHandle DefaultHandle
|
||||
{
|
||||
get => default(DRSProfileHandle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default global profile handle
|
||||
/// </summary>
|
||||
public static DRSProfileHandle DefaultGlobalProfileHandle
|
||||
{
|
||||
get => new DRSProfileHandle(new IntPtr(-1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a NVIDIA driver settings profile
|
||||
/// </summary>
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSProfileV1" /> with the passed name and GPU series support list.
|
||||
/// </summary>
|
||||
/// <param name="name">The name of the profile.</param>
|
||||
/// <param name="gpuSupport">An instance of <see cref="DRSGPUSupport" /> containing the list of supported GPU series.</param>
|
||||
public DRSProfileV1(string name, DRSGPUSupport gpuSupport)
|
||||
{
|
||||
this = typeof(DRSProfileV1).Instantiate<DRSProfileV1>();
|
||||
_ProfileName = new UnicodeString(name);
|
||||
_GPUSupport = gpuSupport;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the profile
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get => _ProfileName.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the GPU series support list
|
||||
/// </summary>
|
||||
public DRSGPUSupport GPUSupport
|
||||
{
|
||||
get => _GPUSupport;
|
||||
set => _GPUSupport = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if this profile is predefined
|
||||
/// </summary>
|
||||
public bool IsPredefined
|
||||
{
|
||||
get => _IsPredefined > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of applications registered under this profile
|
||||
/// </summary>
|
||||
public int NumberOfApplications
|
||||
{
|
||||
get => (int) _NumberOfApplications;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of setting registered under this profile
|
||||
/// </summary>
|
||||
public int NumberOfSettings
|
||||
{
|
||||
get => (int) _NumberOfSettings;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Interfaces;
|
||||
|
||||
namespace NvAPIWrapper.Native.DRS.Structures
|
||||
{
|
||||
/// <summary>
|
||||
/// DRSSessionHandle is a reference to a DRS session.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct DRSSessionHandle : IHandle, IEquatable<DRSSessionHandle>
|
||||
{
|
||||
internal readonly IntPtr _MemoryAddress;
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Equals(DRSSessionHandle other)
|
||||
{
|
||||
return _MemoryAddress.Equals(other._MemoryAddress);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return obj is DRSSessionHandle handle && Equals(handle);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return _MemoryAddress.GetHashCode();
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"DRSSessionHandle #{MemoryAddress.ToInt64()}";
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IntPtr MemoryAddress
|
||||
{
|
||||
get => _MemoryAddress;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsNull
|
||||
{
|
||||
get => _MemoryAddress == IntPtr.Zero;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for equality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are equal, otherwise false</returns>
|
||||
public static bool operator ==(DRSSessionHandle left, DRSSessionHandle right)
|
||||
{
|
||||
return left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks for inequality between two objects of same type
|
||||
/// </summary>
|
||||
/// <param name="left">The first object</param>
|
||||
/// <param name="right">The second object</param>
|
||||
/// <returns>true, if both objects are not equal, otherwise false</returns>
|
||||
public static bool operator !=(DRSSessionHandle left, DRSSessionHandle right)
|
||||
{
|
||||
return !left.Equals(right);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets default DRSSessionHandle with a null pointer
|
||||
/// </summary>
|
||||
public static DRSSessionHandle DefaultHandle
|
||||
{
|
||||
get => default(DRSSessionHandle);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a NVIDIA driver setting
|
||||
/// </summary>
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSSettingV1" /> containing the passed value.
|
||||
/// </summary>
|
||||
/// <param name="id">The setting identification number.</param>
|
||||
/// <param name="settingType">The type of the setting's value</param>
|
||||
/// <param name="value">The setting's value</param>
|
||||
public DRSSettingV1(uint id, DRSSettingType settingType, object value)
|
||||
{
|
||||
this = typeof(DRSSettingV1).Instantiate<DRSSettingV1>();
|
||||
Id = id;
|
||||
IsPredefinedValueValid = false;
|
||||
_SettingType = settingType;
|
||||
CurrentValue = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSSettingV1" /> containing the passed value.
|
||||
/// </summary>
|
||||
/// <param name="id">The setting identification number.</param>
|
||||
/// <param name="value">The setting's value</param>
|
||||
public DRSSettingV1(uint id, string value) : this(id, DRSSettingType.String, value)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSSettingV1" /> containing the passed value.
|
||||
/// </summary>
|
||||
/// <param name="id">The setting identification number.</param>
|
||||
/// <param name="value">The setting's value</param>
|
||||
public DRSSettingV1(uint id, uint value) : this(id, DRSSettingType.Integer, value)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSSettingV1" /> containing the passed value.
|
||||
/// </summary>
|
||||
/// <param name="id">The setting identification number.</param>
|
||||
/// <param name="value">The setting's value</param>
|
||||
public DRSSettingV1(uint id, byte[] value) : this(id, DRSSettingType.Binary, value)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the setting
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get => _SettingName.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the identification number of the setting
|
||||
/// </summary>
|
||||
public uint Id
|
||||
{
|
||||
get => _SettingId;
|
||||
private set => _SettingId = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the setting's value type
|
||||
/// </summary>
|
||||
public DRSSettingType SettingType
|
||||
{
|
||||
get => _SettingType;
|
||||
private set => _SettingType = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the setting location
|
||||
/// </summary>
|
||||
public DRSSettingLocation SettingLocation
|
||||
{
|
||||
get => _SettingLocation;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if the current value is the predefined value
|
||||
/// </summary>
|
||||
public bool IsCurrentValuePredefined
|
||||
{
|
||||
get => _IsCurrentPredefined > 0;
|
||||
private set => _IsCurrentPredefined = value ? 1u : 0u;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a boolean value indicating if the predefined value is available and valid
|
||||
/// </summary>
|
||||
public bool IsPredefinedValueValid
|
||||
{
|
||||
get => _IsPredefinedValid > 0;
|
||||
private set => _IsPredefinedValid = value ? 1u : 0u;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the predefined value as an integer
|
||||
/// </summary>
|
||||
/// <returns>An integer representing the predefined value</returns>
|
||||
public uint GetPredefinedValueAsInteger()
|
||||
{
|
||||
return _PredefinedValue.AsInteger();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the predefined value as an array of bytes
|
||||
/// </summary>
|
||||
/// <returns>An byte array representing the predefined value</returns>
|
||||
public byte[] GetPredefinedValueAsBinary()
|
||||
{
|
||||
return _PredefinedValue.AsBinary();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the predefined value as an unicode string
|
||||
/// </summary>
|
||||
/// <returns>An unicode string representing the predefined value</returns>
|
||||
public string GetPredefinedValueAsUnicodeString()
|
||||
{
|
||||
return _PredefinedValue.AsUnicodeString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the setting's predefined value
|
||||
/// </summary>
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the current value as an integer
|
||||
/// </summary>
|
||||
/// <returns>An integer representing the current value</returns>
|
||||
public uint GetCurrentValueAsInteger()
|
||||
{
|
||||
return _CurrentValue.AsInteger();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the current value as an array of bytes
|
||||
/// </summary>
|
||||
/// <returns>An byte array representing the current value</returns>
|
||||
public byte[] GetCurrentValueAsBinary()
|
||||
{
|
||||
return _CurrentValue.AsBinary();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the current value as an unicode string
|
||||
/// </summary>
|
||||
/// <returns>An unicode string representing the current value</returns>
|
||||
public string GetCurrentValueAsUnicodeString()
|
||||
{
|
||||
return _CurrentValue.AsUnicodeString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the passed value as the current value
|
||||
/// </summary>
|
||||
/// <param name="value">The new value for the setting</param>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the passed value as the current value
|
||||
/// </summary>
|
||||
/// <param name="value">The new value for the setting</param>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the passed value as the current value
|
||||
/// </summary>
|
||||
/// <param name="value">The new value for the setting</param>
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the setting's current value
|
||||
/// </summary>
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a setting value
|
||||
/// </summary>
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSSettingValue" /> containing the passed unicode string as the value
|
||||
/// </summary>
|
||||
/// <param name="value">The unicode string value</param>
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSSettingValue" /> containing the passed byte array as the value
|
||||
/// </summary>
|
||||
/// <param name="value">The byte array value</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="DRSSettingValue" /> containing the passed integer as the value
|
||||
/// </summary>
|
||||
/// <param name="value">The integer value</param>
|
||||
public DRSSettingValue(uint value)
|
||||
{
|
||||
_BinaryValue = new byte[FullStructureSize];
|
||||
var arrayLengthBytes = BitConverter.GetBytes(value);
|
||||
Array.Copy(arrayLengthBytes, 0, _BinaryValue, 0, arrayLengthBytes.Length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the value as an integer
|
||||
/// </summary>
|
||||
/// <returns>An integer representing the value</returns>
|
||||
public uint AsInteger()
|
||||
{
|
||||
return BitConverter.ToUInt32(_BinaryValue, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the value as an array of bytes
|
||||
/// </summary>
|
||||
/// <returns>An array of bytes representing the value</returns>
|
||||
public byte[] AsBinary()
|
||||
{
|
||||
return _BinaryValue.Skip(sizeof(uint)).Take((int) AsInteger()).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the value as an unicode string
|
||||
/// </summary>
|
||||
/// <returns>An unicode string representing the value</returns>
|
||||
public string AsUnicodeString()
|
||||
{
|
||||
return Encoding.Unicode.GetString(_BinaryValue).TrimEnd('\0');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains a list of all possible values for a setting as well as its default value
|
||||
/// </summary>
|
||||
[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;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the setting's value type
|
||||
/// </summary>
|
||||
public DRSSettingType SettingType
|
||||
{
|
||||
get => _SettingType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a list of possible values for the setting
|
||||
/// </summary>
|
||||
public object[] Values
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (_SettingType)
|
||||
{
|
||||
case DRSSettingType.Integer:
|
||||
|
||||
return ValuesAsInteger().Cast<object>().ToArray();
|
||||
case DRSSettingType.Binary:
|
||||
|
||||
return ValuesAsBinary().Cast<object>().ToArray();
|
||||
case DRSSettingType.String:
|
||||
case DRSSettingType.UnicodeString:
|
||||
|
||||
return ValuesAsUnicodeString().Cast<object>().ToArray();
|
||||
default:
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(SettingType));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default value of the setting
|
||||
/// </summary>
|
||||
public object DefaultValue
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (_SettingType)
|
||||
{
|
||||
case DRSSettingType.Integer:
|
||||
|
||||
return DefaultValueAsInteger();
|
||||
case DRSSettingType.Binary:
|
||||
|
||||
return DefaultValueAsBinary();
|
||||
case DRSSettingType.String:
|
||||
case DRSSettingType.UnicodeString:
|
||||
|
||||
return DefaultValueAsUnicodeString();
|
||||
default:
|
||||
|
||||
throw new ArgumentOutOfRangeException(nameof(SettingType));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the default value as an integer
|
||||
/// </summary>
|
||||
/// <returns>An integer representing the default value</returns>
|
||||
public uint DefaultValueAsInteger()
|
||||
{
|
||||
return _DefaultValue.AsInteger();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the default value as a byte array
|
||||
/// </summary>
|
||||
/// <returns>An array of bytes representing the default value</returns>
|
||||
public byte[] DefaultValueAsBinary()
|
||||
{
|
||||
return _DefaultValue.AsBinary();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the default value as an unicode string
|
||||
/// </summary>
|
||||
/// <returns>A string representing the default value</returns>
|
||||
public string DefaultValueAsUnicodeString()
|
||||
{
|
||||
return _DefaultValue.AsUnicodeString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the setting's possible values as an array of integers
|
||||
/// </summary>
|
||||
/// <returns>An array of integers representing the possible values</returns>
|
||||
public uint[] ValuesAsInteger()
|
||||
{
|
||||
return _Values.Take((int) _NumberOfValues).Select(value => value.AsInteger()).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the setting's possible values as an array of byte arrays
|
||||
/// </summary>
|
||||
/// <returns>An array of byte arrays representing the possible values</returns>
|
||||
public byte[][] ValuesAsBinary()
|
||||
{
|
||||
return _Values.Take((int) _NumberOfValues).Select(value => value.AsBinary()).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the setting's possible values as an array of unicode strings
|
||||
/// </summary>
|
||||
/// <returns>An array of unicode strings representing the possible values</returns>
|
||||
public string[] ValuesAsUnicodeString()
|
||||
{
|
||||
return _Values.Take((int) _NumberOfValues).Select(value => value.AsUnicodeString()).ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,936 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using NvAPIWrapper.Native.DRS.Structures;
|
||||
using NvAPIWrapper.Native.Exceptions;
|
||||
using NvAPIWrapper.Native.General;
|
||||
using NvAPIWrapper.Native.General.Structures;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
using NvAPIWrapper.Native.Helpers.Structures;
|
||||
using NvAPIWrapper.Native.Interfaces.DRS;
|
||||
|
||||
namespace NvAPIWrapper.Native
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains driver settings static functions
|
||||
/// </summary>
|
||||
// ReSharper disable once ClassTooBig
|
||||
public static class DRSApi
|
||||
{
|
||||
/// <summary>
|
||||
/// This API adds an executable name to a profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="application">Input <see cref="IDRSApplication" /> instance containing the executable name.</param>
|
||||
/// <returns>The newly created instance of <see cref="IDRSApplication" />.</returns>
|
||||
public static IDRSApplication CreateApplication(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
IDRSApplication application)
|
||||
{
|
||||
using (var applicationReference = ValueTypeReference.FromValueType(application, application.GetType()))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_CreateApplication>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
applicationReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return applicationReference.ToValueType<IDRSApplication>(application.GetType());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API creates an empty profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profile">Input to the <see cref="DRSProfileV1" /> instance.</param>
|
||||
/// <returns>The newly created profile handle.</returns>
|
||||
public static DRSProfileHandle CreateProfile(DRSSessionHandle sessionHandle, DRSProfileV1 profile)
|
||||
{
|
||||
using (var profileReference = ValueTypeReference.FromValueType(profile))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_CreateProfile>()(
|
||||
sessionHandle,
|
||||
profileReference,
|
||||
out var profileHandle
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return profileHandle;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API allocates memory and initializes the session.
|
||||
/// </summary>
|
||||
/// <returns>The newly created session handle.</returns>
|
||||
public static DRSSessionHandle CreateSession()
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_CreateSession>()(out var sessionHandle);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return sessionHandle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API removes an executable from a profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="application">Input all the information about the application to be removed.</param>
|
||||
public static void DeleteApplication(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
IDRSApplication application)
|
||||
{
|
||||
using (var applicationReference = ValueTypeReference.FromValueType(application, application.GetType()))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_DeleteApplicationEx>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
applicationReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API removes an executable name from a profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="applicationName">Input the executable name to be removed.</param>
|
||||
public static void DeleteApplication(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
string applicationName)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_DeleteApplication>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
new UnicodeString(applicationName)
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API deletes a profile or sets it back to a predefined value.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
public static void DeleteProfile(DRSSessionHandle sessionHandle, DRSProfileHandle profileHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_DeleteProfile>()(
|
||||
sessionHandle,
|
||||
profileHandle
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API deletes a setting or sets it back to predefined value.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="settingId">Input settingId to be deleted.</param>
|
||||
public static void DeleteProfileSetting(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
uint settingId)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_DeleteProfileSetting>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
settingId
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API frees the allocated resources for the session handle.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
public static void DestroySession(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_DestroySession>()(sessionHandle);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API enumerates all the applications in a given profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <returns>Instances of <see cref="IDRSApplication" /> with all the attributes filled.</returns>
|
||||
[SuppressMessage("ReSharper", "EventExceptionNotDocumented")]
|
||||
public static IEnumerable<IDRSApplication> EnumApplications(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle)
|
||||
{
|
||||
var maxApplicationsPerRequest = 8;
|
||||
var enumApplications = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_EnumApplications>();
|
||||
|
||||
foreach (var acceptType in enumApplications.Accepts())
|
||||
{
|
||||
var i = 0u;
|
||||
|
||||
while (true)
|
||||
{
|
||||
var instances = acceptType.Instantiate<IDRSApplication>().Repeat(maxApplicationsPerRequest);
|
||||
|
||||
using (var applicationsReference = ValueTypeArray.FromArray(instances, acceptType))
|
||||
{
|
||||
var count = (uint) instances.Length;
|
||||
var status = enumApplications(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
i,
|
||||
ref count,
|
||||
applicationsReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (status == Status.EndEnumeration)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
foreach (var application in applicationsReference.ToArray<IDRSApplication>(
|
||||
(int) count,
|
||||
acceptType))
|
||||
{
|
||||
yield return application;
|
||||
i++;
|
||||
}
|
||||
|
||||
if (count < maxApplicationsPerRequest)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API enumerates all the Ids of all the settings recognized by NVAPI.
|
||||
/// </summary>
|
||||
/// <returns>An array of <see cref="uint" />s filled with the settings identification numbers of available settings.</returns>
|
||||
public static uint[] EnumAvailableSettingIds()
|
||||
{
|
||||
var settingIdsCount = (uint) ushort.MaxValue;
|
||||
var settingIds = 0u.Repeat((int) settingIdsCount);
|
||||
|
||||
using (var settingIdsArray = ValueTypeArray.FromArray(settingIds))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_EnumAvailableSettingIds>()(
|
||||
settingIdsArray,
|
||||
ref settingIdsCount
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return settingIdsArray.ToArray<uint>((int) settingIdsCount);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API enumerates all available setting values for a given setting.
|
||||
/// </summary>
|
||||
/// <param name="settingId">Input settingId.</param>
|
||||
/// <returns>All available setting values.</returns>
|
||||
public static DRSSettingValues EnumAvailableSettingValues(uint settingId)
|
||||
{
|
||||
var settingValuesCount = (uint) DRSSettingValues.MaximumNumberOfValues;
|
||||
var settingValues = typeof(DRSSettingValues).Instantiate<DRSSettingValues>();
|
||||
|
||||
using (var settingValuesReference = ValueTypeReference.FromValueType(settingValues))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_EnumAvailableSettingValues>()(
|
||||
settingId,
|
||||
ref settingValuesCount,
|
||||
settingValuesReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return settingValuesReference.ToValueType<DRSSettingValues>(typeof(DRSSettingValues));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API enumerates through all the profiles in the session.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <returns>Instances of <see cref="DRSProfileHandle" /> each representing a profile.</returns>
|
||||
public static IEnumerable<DRSProfileHandle> EnumProfiles(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var i = 0u;
|
||||
|
||||
while (true)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_EnumProfiles>()(
|
||||
sessionHandle,
|
||||
i,
|
||||
out var profileHandle
|
||||
);
|
||||
|
||||
if (status == Status.EndEnumeration)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
yield return profileHandle;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API enumerates all the settings of a given profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <returns>Instances of <see cref="DRSSettingV1" />.</returns>
|
||||
[SuppressMessage("ReSharper", "EventExceptionNotDocumented")]
|
||||
public static IEnumerable<DRSSettingV1> EnumSettings(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle)
|
||||
{
|
||||
var maxSettingsPerRequest = 32;
|
||||
var enumSettings = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_EnumSettings>();
|
||||
|
||||
var i = 0u;
|
||||
|
||||
while (true)
|
||||
{
|
||||
var instances = typeof(DRSSettingV1).Instantiate<DRSSettingV1>().Repeat(maxSettingsPerRequest);
|
||||
|
||||
using (var applicationsReference = ValueTypeArray.FromArray(instances))
|
||||
{
|
||||
var count = (uint) instances.Length;
|
||||
var status = enumSettings(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
i,
|
||||
ref count,
|
||||
applicationsReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
if (status == Status.EndEnumeration)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
foreach (var application in applicationsReference.ToArray<DRSSettingV1>(
|
||||
(int) count,
|
||||
typeof(DRSSettingV1))
|
||||
)
|
||||
{
|
||||
yield return application;
|
||||
i++;
|
||||
}
|
||||
|
||||
if (count < maxSettingsPerRequest)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API searches the application and the associated profile for the given application name.
|
||||
/// If a fully qualified path is provided, this function will always return the profile
|
||||
/// the driver will apply upon running the application (on the path provided).
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the hSession handle</param>
|
||||
/// <param name="applicationName">Input appName. For best results, provide a fully qualified path of the type</param>
|
||||
/// <param name="profileHandle">The profile handle of the profile that the found application belongs to.</param>
|
||||
/// <returns>An instance of <see cref="IDRSApplication" />.</returns>
|
||||
[SuppressMessage("ReSharper", "EventExceptionNotDocumented")]
|
||||
public static IDRSApplication FindApplicationByName(
|
||||
DRSSessionHandle sessionHandle,
|
||||
string applicationName,
|
||||
out DRSProfileHandle? profileHandle)
|
||||
{
|
||||
var findApplicationByName = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_FindApplicationByName>();
|
||||
|
||||
foreach (var acceptType in findApplicationByName.Accepts())
|
||||
{
|
||||
var instance = acceptType.Instantiate<IDRSApplication>();
|
||||
|
||||
using (var applicationReference = ValueTypeReference.FromValueType(instance, acceptType))
|
||||
{
|
||||
var status = findApplicationByName(
|
||||
sessionHandle,
|
||||
new UnicodeString(applicationName),
|
||||
out var applicationProfileHandle,
|
||||
applicationReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (status == Status.ExecutableNotFound)
|
||||
{
|
||||
profileHandle = null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
profileHandle = applicationProfileHandle;
|
||||
|
||||
return applicationReference.ToValueType<IDRSApplication>(acceptType);
|
||||
}
|
||||
}
|
||||
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API finds a profile in the current session.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileName">Input profileName.</param>
|
||||
/// <returns>The profile handle.</returns>
|
||||
public static DRSProfileHandle FindProfileByName(DRSSessionHandle sessionHandle, string profileName)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_FindProfileByName>()(
|
||||
sessionHandle,
|
||||
new UnicodeString(profileName),
|
||||
out var profileHandle
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return profileHandle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API gets information about the given application. The input application name
|
||||
/// must match exactly what the Profile has stored for the application.
|
||||
/// This function is better used to retrieve application information from a previous
|
||||
/// enumeration.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="applicationName">Input application name.</param>
|
||||
/// <returns>
|
||||
/// An instance of <see cref="IDRSApplication" /> with all attributes filled if found; otherwise
|
||||
/// <see langword="null" />.
|
||||
/// </returns>
|
||||
[SuppressMessage("ReSharper", "EventExceptionNotDocumented")]
|
||||
public static IDRSApplication GetApplicationInfo(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
string applicationName)
|
||||
{
|
||||
var getApplicationInfo = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetApplicationInfo>();
|
||||
|
||||
foreach (var acceptType in getApplicationInfo.Accepts())
|
||||
{
|
||||
var instance = acceptType.Instantiate<IDRSApplication>();
|
||||
|
||||
using (var applicationReference = ValueTypeReference.FromValueType(instance, acceptType))
|
||||
{
|
||||
var status = getApplicationInfo(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
new UnicodeString(applicationName),
|
||||
applicationReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (status == Status.ExecutableNotFound)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return applicationReference.ToValueType<IDRSApplication>(acceptType);
|
||||
}
|
||||
}
|
||||
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the handle to the current global profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <returns>Base profile handle.</returns>
|
||||
public static DRSProfileHandle GetBaseProfile(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetBaseProfile>()(
|
||||
sessionHandle,
|
||||
out var profileHandle
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return profileHandle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API returns the handle to the current global profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <returns>Current global profile handle.</returns>
|
||||
public static DRSProfileHandle GetCurrentGlobalProfile(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetCurrentGlobalProfile>()(
|
||||
sessionHandle,
|
||||
out var profileHandle
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return profileHandle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API obtains the number of profiles in the current session object.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <returns>Number of profiles in the current session.</returns>
|
||||
public static int GetNumberOfProfiles(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetNumProfiles>()(
|
||||
sessionHandle,
|
||||
out var profileCount
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return (int) profileCount;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API gets information about the given profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <returns>An instance of <see cref="DRSProfileV1" /> with all attributes filled.</returns>
|
||||
public static DRSProfileV1 GetProfileInfo(DRSSessionHandle sessionHandle, DRSProfileHandle profileHandle)
|
||||
{
|
||||
var profile = typeof(DRSProfileV1).Instantiate<DRSProfileV1>();
|
||||
|
||||
using (var profileReference = ValueTypeReference.FromValueType(profile))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetProfileInfo>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
profileReference
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return profileReference.ToValueType<DRSProfileV1>().GetValueOrDefault();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API gets information about the given setting.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="settingId">Input settingId.</param>
|
||||
/// <returns>An instance of <see cref="DRSSettingV1" /> describing the setting if found; otherwise <see langword="null" />.</returns>
|
||||
public static DRSSettingV1? GetSetting(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
uint settingId)
|
||||
{
|
||||
var instance = typeof(DRSSettingV1).Instantiate<DRSSettingV1>();
|
||||
|
||||
using (var settingReference = ValueTypeReference.FromValueType(instance, typeof(DRSSettingV1)))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetSetting>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
settingId,
|
||||
settingReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
if (status == Status.SettingNotFound)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return settingReference.ToValueType<DRSSettingV1>(typeof(DRSSettingV1));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API gets the binary identification number of a setting given the setting name.
|
||||
/// </summary>
|
||||
/// <param name="settingName">Input Unicode settingName.</param>
|
||||
/// <returns>The corresponding settingId.</returns>
|
||||
public static uint GetSettingIdFromName(string settingName)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetSettingIdFromName>()(
|
||||
new UnicodeString(settingName),
|
||||
out var settingId
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return settingId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API gets the setting name given the binary identification number.
|
||||
/// </summary>
|
||||
/// <param name="settingId">Input settingId.</param>
|
||||
/// <returns>Corresponding settingName.</returns>
|
||||
public static string GetSettingNameFromId(uint settingId)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_GetSettingNameFromId>()(
|
||||
settingId,
|
||||
out var settingName
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
|
||||
return settingName.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API loads and parses the settings data.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
public static void LoadSettings(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_LoadSettings>()(sessionHandle);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API loads settings from the given file path.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle</param>
|
||||
/// <param name="fileName">Binary full file path.</param>
|
||||
public static void LoadSettings(DRSSessionHandle sessionHandle, string fileName)
|
||||
{
|
||||
var unicodeFileName = new UnicodeString(fileName);
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_LoadSettingsFromFile>()(
|
||||
sessionHandle,
|
||||
unicodeFileName
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API restores the whole system to predefined(default) values.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
public static void RestoreDefaults(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_RestoreAllDefaults>()(
|
||||
sessionHandle
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API restores the given profile to predefined(default) values.
|
||||
/// Any and all user specified modifications will be removed.
|
||||
/// If the whole profile was set by the user, the profile will be removed.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
public static void RestoreDefaults(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_RestoreProfileDefault>()(
|
||||
sessionHandle,
|
||||
profileHandle
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API restores the given profile setting to predefined(default) values.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="settingId">Input settingId.</param>
|
||||
public static void RestoreDefaults(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
uint settingId)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_RestoreProfileDefaultSetting>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
settingId
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API saves the settings data to the system.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
public static void SaveSettings(DRSSessionHandle sessionHandle)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_SaveSettings>()(sessionHandle);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API saves settings to the given file path.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="fileName">Binary full file path.</param>
|
||||
public static void SaveSettings(DRSSessionHandle sessionHandle, string fileName)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_SaveSettingsToFile>()(
|
||||
sessionHandle,
|
||||
new UnicodeString(fileName)
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API sets the current global profile in the driver.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileName">Input the new current global profile name.</param>
|
||||
public static void SetCurrentGlobalProfile(DRSSessionHandle sessionHandle, string profileName)
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_SetCurrentGlobalProfile>()(
|
||||
sessionHandle,
|
||||
new UnicodeString(profileName)
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Specifies flags for a given profile. Currently only the GPUSupport is
|
||||
/// used to update the profile. Neither the name, number of settings or applications
|
||||
/// or other profile information can be changed with this function.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="profile">Input the new profile info.</param>
|
||||
public static void SetProfileInfo(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
DRSProfileV1 profile)
|
||||
{
|
||||
using (var profileReference = ValueTypeReference.FromValueType(profile))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_SetProfileInfo>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
profileReference
|
||||
);
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This API adds/modifies a setting to a profile.
|
||||
/// </summary>
|
||||
/// <param name="sessionHandle">Input to the session handle.</param>
|
||||
/// <param name="profileHandle">Input profile handle.</param>
|
||||
/// <param name="setting">
|
||||
/// An instance of <see cref="DRSSettingV1" /> containing the setting identification number and new
|
||||
/// value for the setting.
|
||||
/// </param>
|
||||
public static void SetSetting(
|
||||
DRSSessionHandle sessionHandle,
|
||||
DRSProfileHandle profileHandle,
|
||||
DRSSettingV1 setting)
|
||||
{
|
||||
using (var settingReference = ValueTypeReference.FromValueType(setting, setting.GetType()))
|
||||
{
|
||||
var status = DelegateFactory.GetDelegate<Delegates.DRS.NvAPI_DRS_SetSetting>()(
|
||||
sessionHandle,
|
||||
profileHandle,
|
||||
settingReference
|
||||
);
|
||||
|
||||
if (status == Status.IncompatibleStructureVersion)
|
||||
{
|
||||
throw new NVIDIANotSupportedException("This operation is not supported.");
|
||||
}
|
||||
|
||||
if (status != Status.Ok)
|
||||
{
|
||||
throw new NVIDIAApiException(status);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,255 +0,0 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Attributes;
|
||||
using NvAPIWrapper.Native.DRS.Structures;
|
||||
using NvAPIWrapper.Native.General;
|
||||
using NvAPIWrapper.Native.General.Structures;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
using NvAPIWrapper.Native.Helpers.Structures;
|
||||
|
||||
namespace NvAPIWrapper.Native.Delegates
|
||||
{
|
||||
// ReSharper disable InconsistentNaming
|
||||
internal static class DRS
|
||||
{
|
||||
[FunctionId(FunctionId.NvAPI_DRS_CreateApplication)]
|
||||
public delegate Status NvAPI_DRS_CreateApplication(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In]
|
||||
[Accepts(
|
||||
typeof(DRSApplicationV4),
|
||||
typeof(DRSApplicationV3),
|
||||
typeof(DRSApplicationV2),
|
||||
typeof(DRSApplicationV1)
|
||||
)]
|
||||
ValueTypeReference application
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_CreateProfile)]
|
||||
public delegate Status NvAPI_DRS_CreateProfile(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] [Accepts(typeof(DRSProfileV1))] ValueTypeReference profile,
|
||||
[Out] out DRSProfileHandle profileHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_CreateSession)]
|
||||
public delegate Status NvAPI_DRS_CreateSession([Out] out DRSSessionHandle sessionHandle);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_DeleteApplication)]
|
||||
public delegate Status NvAPI_DRS_DeleteApplication(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] UnicodeString applicationName
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_DeleteApplicationEx)]
|
||||
public delegate Status NvAPI_DRS_DeleteApplicationEx(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In]
|
||||
[Accepts(typeof(DRSApplicationV1), typeof(DRSApplicationV2), typeof(DRSApplicationV3),
|
||||
typeof(DRSApplicationV4))]
|
||||
ValueTypeReference application
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_DeleteProfile)]
|
||||
public delegate Status NvAPI_DRS_DeleteProfile(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_DeleteProfileSetting)]
|
||||
public delegate Status NvAPI_DRS_DeleteProfileSetting(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] uint settingId
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_DestroySession)]
|
||||
public delegate Status NvAPI_DRS_DestroySession([In] DRSSessionHandle sessionHandle);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_EnumApplications)]
|
||||
public delegate Status NvAPI_DRS_EnumApplications(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] uint index,
|
||||
[In] [Out] ref uint count,
|
||||
[In]
|
||||
[Accepts(
|
||||
typeof(DRSApplicationV4),
|
||||
typeof(DRSApplicationV3),
|
||||
typeof(DRSApplicationV2),
|
||||
typeof(DRSApplicationV1)
|
||||
)]
|
||||
ValueTypeArray applications
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_EnumAvailableSettingIds)]
|
||||
public delegate Status NvAPI_DRS_EnumAvailableSettingIds(
|
||||
[In] [Accepts(typeof(uint))] ValueTypeArray settingIds,
|
||||
[In] [Out] ref uint count
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_EnumAvailableSettingValues)]
|
||||
public delegate Status NvAPI_DRS_EnumAvailableSettingValues(
|
||||
[In] uint settingId,
|
||||
[In] [Out] ref uint count,
|
||||
[In] [Out] [Accepts(typeof(DRSSettingValues))]
|
||||
ValueTypeReference settingValues
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_EnumProfiles)]
|
||||
public delegate Status NvAPI_DRS_EnumProfiles(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] uint index,
|
||||
[Out] out DRSProfileHandle profileHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_EnumSettings)]
|
||||
public delegate Status NvAPI_DRS_EnumSettings(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] uint index,
|
||||
[In] [Out] ref uint count,
|
||||
[In] [Out] [Accepts(typeof(DRSSettingV1))]
|
||||
ValueTypeArray settings
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_FindApplicationByName)]
|
||||
public delegate Status NvAPI_DRS_FindApplicationByName(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] UnicodeString applicationName,
|
||||
[Out] out DRSProfileHandle profileHandle,
|
||||
[In]
|
||||
[Accepts(
|
||||
typeof(DRSApplicationV4),
|
||||
typeof(DRSApplicationV3),
|
||||
typeof(DRSApplicationV2),
|
||||
typeof(DRSApplicationV1)
|
||||
)]
|
||||
ValueTypeReference application
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_FindProfileByName)]
|
||||
public delegate Status NvAPI_DRS_FindProfileByName(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] UnicodeString profileName,
|
||||
[Out] out DRSProfileHandle profileHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetApplicationInfo)]
|
||||
public delegate Status NvAPI_DRS_GetApplicationInfo(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] UnicodeString applicationName,
|
||||
[In]
|
||||
[Accepts(
|
||||
typeof(DRSApplicationV4),
|
||||
typeof(DRSApplicationV3),
|
||||
typeof(DRSApplicationV2),
|
||||
typeof(DRSApplicationV1)
|
||||
)]
|
||||
ValueTypeReference application
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetBaseProfile)]
|
||||
public delegate Status NvAPI_DRS_GetBaseProfile(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[Out] out DRSProfileHandle profileHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetCurrentGlobalProfile)]
|
||||
public delegate Status NvAPI_DRS_GetCurrentGlobalProfile(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[Out] out DRSProfileHandle profileHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetNumProfiles)]
|
||||
public delegate Status NvAPI_DRS_GetNumProfiles([In] DRSSessionHandle sessionHandle, [Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetProfileInfo)]
|
||||
public delegate Status NvAPI_DRS_GetProfileInfo(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] [Accepts(typeof(DRSProfileV1))] ValueTypeReference profile
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetSetting)]
|
||||
public delegate Status NvAPI_DRS_GetSetting(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] uint settingId,
|
||||
[Out] [Accepts(typeof(DRSSettingV1))] ValueTypeReference setting
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetSettingIdFromName)]
|
||||
public delegate Status NvAPI_DRS_GetSettingIdFromName(
|
||||
[In] UnicodeString settingName,
|
||||
[Out] out uint settingId
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_GetSettingNameFromId)]
|
||||
public delegate Status NvAPI_DRS_GetSettingNameFromId(
|
||||
[In] uint settingId,
|
||||
[Out] out UnicodeString settingName
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_LoadSettings)]
|
||||
public delegate Status NvAPI_DRS_LoadSettings([In] DRSSessionHandle sessionHandle);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_LoadSettingsFromFile)]
|
||||
public delegate Status NvAPI_DRS_LoadSettingsFromFile(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] UnicodeString fileName
|
||||
);
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_RestoreAllDefaults)]
|
||||
public delegate Status NvAPI_DRS_RestoreAllDefaults(
|
||||
[In] DRSSessionHandle sessionHandle
|
||||
);
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_RestoreProfileDefault)]
|
||||
public delegate Status NvAPI_DRS_RestoreProfileDefault(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_RestoreProfileDefaultSetting)]
|
||||
public delegate Status NvAPI_DRS_RestoreProfileDefaultSetting(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] uint settingId
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_SaveSettings)]
|
||||
public delegate Status NvAPI_DRS_SaveSettings([In] DRSSessionHandle sessionHandle);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_SaveSettingsToFile)]
|
||||
public delegate Status NvAPI_DRS_SaveSettingsToFile(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] UnicodeString fileName
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_SetCurrentGlobalProfile)]
|
||||
public delegate Status NvAPI_DRS_SetCurrentGlobalProfile(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] UnicodeString profileName
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_SetProfileInfo)]
|
||||
public delegate Status NvAPI_DRS_SetProfileInfo(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] [Accepts(typeof(DRSProfileV1))] ValueTypeReference profile
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DRS_SetSetting)]
|
||||
public delegate Status NvAPI_DRS_SetSetting(
|
||||
[In] DRSSessionHandle sessionHandle,
|
||||
[In] DRSProfileHandle profileHandle,
|
||||
[In] [Accepts(typeof(DRSSettingV1))] ValueTypeReference setting
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,328 +0,0 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Attributes;
|
||||
using NvAPIWrapper.Native.Display;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
using NvAPIWrapper.Native.General;
|
||||
using NvAPIWrapper.Native.General.Structures;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
using NvAPIWrapper.Native.Helpers.Structures;
|
||||
using Rectangle = NvAPIWrapper.Native.General.Structures.Rectangle;
|
||||
|
||||
// ReSharper disable InconsistentNaming
|
||||
|
||||
namespace NvAPIWrapper.Native.Delegates
|
||||
{
|
||||
internal static class Display
|
||||
{
|
||||
[FunctionId(FunctionId.NvAPI_CreateDisplayFromUnAttachedDisplay)]
|
||||
public delegate Status NvAPI_CreateDisplayFromUnAttachedDisplay(
|
||||
[In] UnAttachedDisplayHandle display,
|
||||
[Out] out DisplayHandle newDisplay
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Disp_ColorControl)]
|
||||
public delegate Status NvAPI_Disp_ColorControl(
|
||||
[In] uint displayId,
|
||||
[In]
|
||||
[Out]
|
||||
[Accepts(
|
||||
typeof(ColorDataV5),
|
||||
typeof(ColorDataV4),
|
||||
typeof(ColorDataV3),
|
||||
typeof(ColorDataV2),
|
||||
typeof(ColorDataV1)
|
||||
)]
|
||||
ValueTypeReference colorData
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_DeleteCustomDisplay)]
|
||||
public delegate Status NvAPI_DISP_DeleteCustomDisplay(
|
||||
[In] [Accepts(typeof(uint))] ValueTypeArray displayIds,
|
||||
[In] uint count,
|
||||
[In] [Accepts(typeof(CustomDisplay))] ValueTypeReference customDisplay
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_EnumCustomDisplay)]
|
||||
public delegate Status NvAPI_DISP_EnumCustomDisplay(
|
||||
[In] uint displayId,
|
||||
[In] uint index,
|
||||
[In] [Accepts(typeof(CustomDisplay))] ValueTypeReference customDisplay
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_GetAssociatedUnAttachedNvidiaDisplayHandle)]
|
||||
public delegate Status NvAPI_DISP_GetAssociatedUnAttachedNvidiaDisplayHandle(
|
||||
[In] [MarshalAs(UnmanagedType.LPStr)] string displayName,
|
||||
[Out] out UnAttachedDisplayHandle display
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_GetDisplayConfig)]
|
||||
public delegate Status NvAPI_DISP_GetDisplayConfig(
|
||||
[In] [Out] ref uint pathInfoCount,
|
||||
[In] [Accepts(typeof(PathInfoV2), typeof(PathInfoV1))]
|
||||
ValueTypeArray pathInfos
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_GetDisplayIdByDisplayName)]
|
||||
public delegate Status NvAPI_DISP_GetDisplayIdByDisplayName([In] string displayName, [Out] out uint displayId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_GetGDIPrimaryDisplayId)]
|
||||
public delegate Status NvAPI_DISP_GetGDIPrimaryDisplayId([Out] out uint displayId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Disp_GetHdrCapabilities)]
|
||||
public delegate Status NvAPI_Disp_GetHdrCapabilities(
|
||||
[In] uint displayId,
|
||||
[In] [Out] [Accepts(typeof(HDRCapabilitiesV1))]
|
||||
ValueTypeReference hdrCapabilities
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_GetMonitorCapabilities)]
|
||||
public delegate Status NvAPI_DISP_GetMonitorCapabilities(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(MonitorCapabilities))]
|
||||
ValueTypeReference capabilities
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_GetMonitorColorCapabilities)]
|
||||
public delegate Status NvAPI_DISP_GetMonitorColorCapabilities(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(MonitorColorData))]
|
||||
ValueTypeArray capabilities,
|
||||
[In] [Out] ref uint count
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_GetTiming)]
|
||||
public delegate Status NvAPI_DISP_GetTiming(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(TimingInput))] ValueTypeReference timingInput,
|
||||
[In] [Accepts(typeof(Timing))] ValueTypeReference timing
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Disp_HdrColorControl)]
|
||||
public delegate Status NvAPI_Disp_HdrColorControl(
|
||||
[In] uint displayId,
|
||||
[In] [Out] [Accepts(typeof(HDRColorDataV2), typeof(HDRColorDataV1))]
|
||||
ValueTypeReference hdrColorData
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Disp_InfoFrameControl)]
|
||||
public delegate Status NvAPI_Disp_InfoFrameControl(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(InfoFrameData))] ValueTypeReference infoFrameData
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_RevertCustomDisplayTrial)]
|
||||
public delegate Status NvAPI_DISP_RevertCustomDisplayTrial(
|
||||
[In] [Accepts(typeof(uint))] ValueTypeArray displayIds,
|
||||
[In] uint count
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_SaveCustomDisplay)]
|
||||
public delegate Status NvAPI_DISP_SaveCustomDisplay(
|
||||
[In] [Accepts(typeof(uint))] ValueTypeArray displayIds,
|
||||
[In] uint count,
|
||||
[In] uint isThisOutputIdOnly,
|
||||
[In] uint isThisMonitorIdOnly
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_SetDisplayConfig)]
|
||||
public delegate Status NvAPI_DISP_SetDisplayConfig(
|
||||
[In] uint pathInfoCount,
|
||||
[In] [Accepts(typeof(PathInfoV2), typeof(PathInfoV1))]
|
||||
ValueTypeArray pathInfos,
|
||||
[In] DisplayConfigFlags flags
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_DISP_TryCustomDisplay)]
|
||||
public delegate Status NvAPI_DISP_TryCustomDisplay(
|
||||
[In] [Accepts(typeof(uint))] ValueTypeArray displayIds,
|
||||
[In] uint count,
|
||||
[In] [Accepts(typeof(CustomDisplay))] ValueTypeArray customDisplays
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_EnumNvidiaDisplayHandle)]
|
||||
public delegate Status NvAPI_EnumNvidiaDisplayHandle(
|
||||
[In] uint enumId,
|
||||
[Out] out DisplayHandle display
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_EnumNvidiaUnAttachedDisplayHandle)]
|
||||
public delegate Status NvAPI_EnumNvidiaUnAttachedDisplayHandle(
|
||||
[In] uint enumId,
|
||||
[Out] out UnAttachedDisplayHandle display
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetAssociatedDisplayOutputId)]
|
||||
public delegate Status NvAPI_GetAssociatedDisplayOutputId(
|
||||
[In] DisplayHandle display,
|
||||
[Out] out OutputId outputId
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetAssociatedNvidiaDisplayHandle)]
|
||||
public delegate Status NvAPI_GetAssociatedNvidiaDisplayHandle(
|
||||
[In] [MarshalAs(UnmanagedType.LPStr)] string displayName,
|
||||
[Out] out DisplayHandle display
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetAssociatedNvidiaDisplayName)]
|
||||
public delegate Status NvAPI_GetAssociatedNvidiaDisplayName(
|
||||
[In] DisplayHandle display,
|
||||
[Out] out ShortString displayName
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetDisplayDriverBuildTitle)]
|
||||
public delegate Status NvAPI_GetDisplayDriverBuildTitle(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[Out] out ShortString name
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetDisplayDriverMemoryInfo)]
|
||||
public delegate Status NvAPI_GetDisplayDriverMemoryInfo(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In]
|
||||
[Accepts(
|
||||
typeof(DisplayDriverMemoryInfoV3),
|
||||
typeof(DisplayDriverMemoryInfoV2),
|
||||
typeof(DisplayDriverMemoryInfoV1)
|
||||
)]
|
||||
ValueTypeReference memoryInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetDVCInfo)]
|
||||
public delegate Status NvAPI_GetDVCInfo(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] OutputId displayId,
|
||||
[In] [Accepts(typeof(PrivateDisplayDVCInfo))]
|
||||
ValueTypeReference dvcInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetDVCInfoEx)]
|
||||
public delegate Status NvAPI_GetDVCInfoEx(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] OutputId displayId,
|
||||
[In] [Accepts(typeof(PrivateDisplayDVCInfoEx))]
|
||||
ValueTypeReference dvcInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetHDMISupportInfo)]
|
||||
public delegate Status NvAPI_GetHDMISupportInfo(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] uint displayIdOrOutputId,
|
||||
[In] [Accepts(typeof(HDMISupportInfoV2), typeof(HDMISupportInfoV1))]
|
||||
ValueTypeReference supportInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetHUEInfo)]
|
||||
public delegate Status NvAPI_GetHUEInfo(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] OutputId displayId,
|
||||
[In] [Accepts(typeof(PrivateDisplayHUEInfo))]
|
||||
ValueTypeReference hueInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetSupportedViews)]
|
||||
public delegate Status NvAPI_GetSupportedViews(
|
||||
[In] DisplayHandle display,
|
||||
[In] [Accepts(typeof(TargetViewMode))] ValueTypeArray viewModes,
|
||||
[Out] [In] ref uint viewCount
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetUnAttachedAssociatedDisplayName)]
|
||||
public delegate Status NvAPI_GetUnAttachedAssociatedDisplayName(
|
||||
[In] UnAttachedDisplayHandle display,
|
||||
[Out] out ShortString displayName
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetScanoutCompositionParameter)]
|
||||
public delegate Status NvAPI_GPU_GetScanOutCompositionParameter(
|
||||
[In] uint displayId,
|
||||
[In] ScanOutCompositionParameter parameter,
|
||||
[Out] out ScanOutCompositionParameterValue parameterValue,
|
||||
[Out] out float container
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetScanoutConfiguration)]
|
||||
public delegate Status NvAPI_GPU_GetScanOutConfiguration(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(Rectangle))] ValueTypeReference desktopRectangle,
|
||||
[In] [Accepts(typeof(Rectangle))] ValueTypeReference scanOutRectangle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetScanoutConfigurationEx)]
|
||||
public delegate Status NvAPI_GPU_GetScanOutConfigurationEx(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(ScanOutInformationV1))]
|
||||
ValueTypeReference scanOutInformation
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetScanoutIntensityState)]
|
||||
public delegate Status NvAPI_GPU_GetScanOutIntensityState(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(ScanOutIntensityStateV1))]
|
||||
ValueTypeReference scanOutIntensityState
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetScanoutWarpingState)]
|
||||
public delegate Status NvAPI_GPU_GetScanOutWarpingState(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(ScanOutWarpingStateV1))]
|
||||
ValueTypeReference scanOutWarpingState
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetScanoutCompositionParameter)]
|
||||
public delegate Status NvAPI_GPU_SetScanOutCompositionParameter(
|
||||
[In] uint displayId,
|
||||
[In] ScanOutCompositionParameter parameter,
|
||||
[In] ScanOutCompositionParameterValue parameterValue,
|
||||
[In] ref float container
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetScanoutIntensity)]
|
||||
public delegate Status NvAPI_GPU_SetScanOutIntensity(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(ScanOutIntensityV2), typeof(ScanOutIntensityV1))]
|
||||
ValueTypeReference scanOutIntensityData,
|
||||
[Out] out int isSticky
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetScanoutWarping)]
|
||||
public delegate Status NvAPI_GPU_SetScanOutWarping(
|
||||
[In] uint displayId,
|
||||
[In] [Accepts(typeof(ScanOutWarpingV1))]
|
||||
ValueTypeReference scanOutWarping,
|
||||
[In] [Out] ref int maximumNumberOfVertices,
|
||||
[Out] out int isSticky
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SetDVCLevel)]
|
||||
public delegate Status NvAPI_SetDVCLevel(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] OutputId displayId,
|
||||
[In] int dvcLevel
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SetDVCLevelEx)]
|
||||
public delegate Status NvAPI_SetDVCLevelEx(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] OutputId displayId,
|
||||
[In] [Accepts(typeof(PrivateDisplayDVCInfoEx))]
|
||||
ValueTypeReference dvcInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SetHUEAngle)]
|
||||
public delegate Status NvAPI_SetHUEAngle(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] OutputId displayId,
|
||||
[In] int hueAngle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SetRefreshRateOverride)]
|
||||
public delegate Status NvAPI_SetRefreshRateOverride(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] OutputId outputMask,
|
||||
[In] float refreshRate,
|
||||
[In] uint isDeferred
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,726 +0,0 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Attributes;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
using NvAPIWrapper.Native.General;
|
||||
using NvAPIWrapper.Native.General.Structures;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
using NvAPIWrapper.Native.Helpers.Structures;
|
||||
|
||||
// ReSharper disable InconsistentNaming
|
||||
|
||||
namespace NvAPIWrapper.Native.Delegates
|
||||
{
|
||||
internal static class GPU
|
||||
{
|
||||
[FunctionId(FunctionId.NvAPI_EnumLogicalGPUs)]
|
||||
public delegate Status NvAPI_EnumLogicalGPUs(
|
||||
[In] [Out] [MarshalAs(UnmanagedType.LPArray, SizeConst = LogicalGPUHandle.MaxLogicalGPUs)]
|
||||
LogicalGPUHandle[]
|
||||
gpuHandles,
|
||||
[Out] out uint gpuCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_EnumPhysicalGPUs)]
|
||||
public delegate Status NvAPI_EnumPhysicalGPUs(
|
||||
[In] [Out] [MarshalAs(UnmanagedType.LPArray, SizeConst = PhysicalGPUHandle.MaxPhysicalGPUs)]
|
||||
PhysicalGPUHandle[]
|
||||
gpuHandles,
|
||||
[Out] out uint gpuCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_EnumTCCPhysicalGPUs)]
|
||||
public delegate Status NvAPI_EnumTCCPhysicalGPUs(
|
||||
[In] [Out] [MarshalAs(UnmanagedType.LPArray, SizeConst = PhysicalGPUHandle.MaxPhysicalGPUs)]
|
||||
PhysicalGPUHandle[]
|
||||
gpuHandles,
|
||||
[Out] out uint gpuCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetDriverModel)]
|
||||
public delegate Status NvAPI_GetDriverModel(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint model);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetGPUIDfromPhysicalGPU)]
|
||||
public delegate Status NvAPI_GetGPUIDFromPhysicalGPU(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint gpuId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetLogicalGPUFromDisplay)]
|
||||
public delegate Status NvAPI_GetLogicalGPUFromDisplay(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[Out] out LogicalGPUHandle gpuHandle);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetLogicalGPUFromPhysicalGPU)]
|
||||
public delegate Status NvAPI_GetLogicalGPUFromPhysicalGPU(
|
||||
[In] PhysicalGPUHandle physicalGPUHandle,
|
||||
[Out] out LogicalGPUHandle logicalGPUHandle);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetPhysicalGPUFromGPUID)]
|
||||
public delegate Status NvAPI_GetPhysicalGPUFromGPUID(
|
||||
[In] uint gpuId,
|
||||
[Out] out PhysicalGPUHandle physicalGpu);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetPhysicalGPUFromUnAttachedDisplay)]
|
||||
public delegate Status NvAPI_GetPhysicalGPUFromUnAttachedDisplay(
|
||||
[In] UnAttachedDisplayHandle displayHandle,
|
||||
[Out] out PhysicalGPUHandle gpuHandle);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetPhysicalGPUsFromDisplay)]
|
||||
public delegate Status NvAPI_GetPhysicalGPUsFromDisplay(
|
||||
[In] DisplayHandle displayHandle,
|
||||
[In] [Out] [MarshalAs(UnmanagedType.LPArray, SizeConst = PhysicalGPUHandle.MaxPhysicalGPUs)]
|
||||
PhysicalGPUHandle[]
|
||||
gpuHandles,
|
||||
[Out] out uint gpuCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetPhysicalGPUsFromLogicalGPU)]
|
||||
public delegate Status NvAPI_GetPhysicalGPUsFromLogicalGPU(
|
||||
[In] LogicalGPUHandle logicalGPUHandle,
|
||||
[In] [Out] [MarshalAs(UnmanagedType.LPArray, SizeConst = PhysicalGPUHandle.MaxPhysicalGPUs)]
|
||||
PhysicalGPUHandle[]
|
||||
gpuHandles,
|
||||
[Out] out uint gpuCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientFanCoolersGetControl)]
|
||||
public delegate Status NvAPI_GPU_ClientFanCoolersGetControl(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateFanCoolersControlV1))] [In]
|
||||
ValueTypeReference control);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientFanCoolersGetInfo)]
|
||||
public delegate Status NvAPI_GPU_ClientFanCoolersGetInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateFanCoolersInfoV1))] [In]
|
||||
ValueTypeReference info);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientFanCoolersGetStatus)]
|
||||
public delegate Status NvAPI_GPU_ClientFanCoolersGetStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateFanCoolersStatusV1))] [In]
|
||||
ValueTypeReference status);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientFanCoolersSetControl)]
|
||||
public delegate Status NvAPI_GPU_ClientFanCoolersSetControl(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateFanCoolersControlV1))] [In]
|
||||
ValueTypeReference control);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientIllumDevicesGetControl)]
|
||||
public delegate Status NvAPI_GPU_ClientIlluminationDevicesGetControl(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[Accepts(typeof(IlluminationDeviceControlParametersV1))] [In]
|
||||
ValueTypeReference illuminationDeviceControlInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientIllumDevicesGetInfo)]
|
||||
public delegate Status NvAPI_GPU_ClientIlluminationDevicesGetInfo(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[Accepts(typeof(IlluminationDeviceInfoParametersV1))] [In]
|
||||
ValueTypeReference illuminationDevicesInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientIllumDevicesSetControl)]
|
||||
public delegate Status NvAPI_GPU_ClientIlluminationDevicesSetControl(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[Accepts(typeof(IlluminationDeviceControlParametersV1))] [In]
|
||||
ValueTypeReference illuminationDeviceControlInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientIllumZonesGetControl)]
|
||||
public delegate Status NvAPI_GPU_ClientIlluminationZonesGetControl(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[Accepts(typeof(IlluminationZoneControlParametersV1))] [In]
|
||||
ValueTypeReference illuminationZoneControlInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientIllumZonesGetInfo)]
|
||||
public delegate Status NvAPI_GPU_ClientIlluminationZonesGetInfo(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[Accepts(typeof(IlluminationZoneInfoParametersV1))] [In]
|
||||
ValueTypeReference illuminationZoneInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientIllumZonesSetControl)]
|
||||
public delegate Status NvAPI_GPU_ClientIlluminationZonesSetControl(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[Accepts(typeof(IlluminationZoneControlParametersV1))] [In]
|
||||
ValueTypeReference illuminationZoneControlInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientPowerPoliciesGetInfo)]
|
||||
public delegate Status NvAPI_GPU_ClientPowerPoliciesGetInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivatePowerPoliciesInfoV1))] [In]
|
||||
ValueTypeReference powerInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientPowerPoliciesGetStatus)]
|
||||
public delegate Status NvAPI_GPU_ClientPowerPoliciesGetStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivatePowerPoliciesStatusV1))] [In]
|
||||
ValueTypeReference status);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientPowerPoliciesSetStatus)]
|
||||
public delegate Status NvAPI_GPU_ClientPowerPoliciesSetStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivatePowerPoliciesStatusV1))] [In]
|
||||
ValueTypeReference status);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ClientPowerTopologyGetStatus)]
|
||||
public delegate Status NvAPI_GPU_ClientPowerTopologyGetStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivatePowerTopologiesStatusV1))] [In]
|
||||
ValueTypeReference status);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_EnableDynamicPstates)]
|
||||
public delegate Status NvAPI_GPU_EnableDynamicPStates([In] PhysicalGPUHandle physicalGpu);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_EnableOverclockedPstates)]
|
||||
public delegate Status NvAPI_GPU_EnableOverclockedPStates([In] PhysicalGPUHandle physicalGpu);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetActiveOutputs)]
|
||||
public delegate Status NvAPI_GPU_GetActiveOutputs(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out OutputId outputMask);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetAGPAperture)]
|
||||
public delegate Status NvAPI_GPU_GetAGPAperture(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint size);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetAllClockFrequencies)]
|
||||
public delegate Status NvAPI_GPU_GetAllClockFrequencies(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(ClockFrequenciesV3), typeof(ClockFrequenciesV2), typeof(ClockFrequenciesV1))]
|
||||
ValueTypeReference nvClocks);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetAllDisplayIds)]
|
||||
public delegate Status NvAPI_GPU_GetAllDisplayIds(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(DisplayIdsV2))] [In] [Out]
|
||||
ValueTypeArray pDisplayIds,
|
||||
[In] [Out] ref uint displayIdCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetArchInfo)]
|
||||
public delegate Status NvAPI_GPU_GetArchInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateArchitectInfoV2))] [In]
|
||||
ValueTypeReference info);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetBoardInfo)]
|
||||
public delegate Status NvAPI_GPU_GetBoardInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] [In] ref BoardInfo info);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetBusId)]
|
||||
public delegate Status NvAPI_GPU_GetBusId(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint gpuBusId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetBusSlotId)]
|
||||
public delegate Status NvAPI_GPU_GetBusSlotId(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint gpuBusSlotId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetBusType)]
|
||||
public delegate Status NvAPI_GPU_GetBusType(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out GPUBusType gpuBusType);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetClockBoostLock)]
|
||||
public delegate Status NvAPI_GPU_GetClockBoostLock(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateClockBoostLockV2))]
|
||||
ValueTypeReference clockLocks);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetClockBoostMask)]
|
||||
public delegate Status NvAPI_GPU_GetClockBoostMask(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateClockBoostMasksV1))]
|
||||
ValueTypeReference clockMasks);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetClockBoostRanges)]
|
||||
public delegate Status NvAPI_GPU_GetClockBoostRanges(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateClockBoostRangesV1))]
|
||||
ValueTypeReference clockRanges);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetClockBoostTable)]
|
||||
public delegate Status NvAPI_GPU_GetClockBoostTable(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateClockBoostTableV1))]
|
||||
ValueTypeReference boostTable);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetConnectedDisplayIds)]
|
||||
public delegate Status NvAPI_GPU_GetConnectedDisplayIds(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(DisplayIdsV2))] [In] [Out]
|
||||
ValueTypeArray pDisplayIds,
|
||||
[In] [Out] ref uint displayIdCount,
|
||||
[In] ConnectedIdsFlag flags);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCoolerPolicyTable)]
|
||||
public delegate Status NvAPI_GPU_GetCoolerPolicyTable(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] uint index,
|
||||
[In] [Accepts(typeof(PrivateCoolerPolicyTableV1))]
|
||||
ValueTypeReference coolerPolicyTable,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCoolerSettings)]
|
||||
public delegate Status NvAPI_GPU_GetCoolerSettings(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] CoolerTarget coolerIndex,
|
||||
[In] [Accepts(typeof(PrivateCoolerSettingsV1))]
|
||||
ValueTypeReference coolerSettings);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCoreVoltageBoostPercent)]
|
||||
public delegate Status NvAPI_GPU_GetCoreVoltageBoostPercent(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateVoltageBoostPercentV1))]
|
||||
ValueTypeReference voltageBoostPercent);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCurrentAGPRate)]
|
||||
public delegate Status NvAPI_GPU_GetCurrentAGPRate(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint rate);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCurrentFanSpeedLevel)]
|
||||
public delegate Status NvAPI_GPU_GetCurrentFanSpeedLevel(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint fanLevel);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCurrentPCIEDownstreamWidth)]
|
||||
public delegate Status NvAPI_GPU_GetCurrentPCIEDownstreamWidth(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint width);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCurrentPstate)]
|
||||
public delegate Status NvAPI_GPU_GetCurrentPState(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out PerformanceStateId performanceStateId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCurrentThermalLevel)]
|
||||
public delegate Status NvAPI_GPU_GetCurrentThermalLevel(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint thermalLevel);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetCurrentVoltage)]
|
||||
public delegate Status NvAPI_GPU_GetCurrentVoltage(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateVoltageStatusV1))]
|
||||
ValueTypeReference voltageStatus);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetDynamicPstatesInfoEx)]
|
||||
public delegate Status NvAPI_GPU_GetDynamicPStatesInfoEx(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(DynamicPerformanceStatesInfoV1))]
|
||||
ValueTypeReference performanceStatesInfoEx);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetECCConfigurationInfo)]
|
||||
public delegate Status NvAPI_GPU_GetECCConfigurationInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(ECCConfigurationInfoV1))]
|
||||
ValueTypeReference eccConfigurationInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetECCErrorInfo)]
|
||||
public delegate Status NvAPI_GPU_GetECCErrorInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(ECCErrorInfoV1))] ValueTypeReference eccErrorInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetECCStatusInfo)]
|
||||
public delegate Status NvAPI_GPU_GetECCStatusInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(ECCStatusInfoV1))]
|
||||
ValueTypeReference eccStatusInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetEDID)]
|
||||
public delegate Status NvAPI_GPU_GetEDID(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] OutputId outputId,
|
||||
[Accepts(typeof(EDIDV3), typeof(EDIDV2), typeof(EDIDV1))] [In]
|
||||
ValueTypeReference edid);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetFBWidthAndLocation)]
|
||||
public delegate Status NvAPI_GPU_GetFBWidthAndLocation(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint width,
|
||||
[Out] out uint location);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetFoundry)]
|
||||
public delegate Status NvAPI_GPU_GetFoundry(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out GPUFoundry pFoundry);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetFullName)]
|
||||
public delegate Status NvAPI_GPU_GetFullName(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out ShortString name);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetGpuCoreCount)]
|
||||
public delegate Status NvAPI_GPU_GetGpuCoreCount(
|
||||
[In] PhysicalGPUHandle gpuHandle,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetGPUType)]
|
||||
public delegate Status NvAPI_GPU_GetGPUType(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out GPUType gpuType);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetIllumination)]
|
||||
public delegate Status NvAPI_GPU_GetIllumination(
|
||||
[Accepts(typeof(GetIlluminationParameterV1))] [In]
|
||||
ValueTypeReference illuminationInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetIRQ)]
|
||||
public delegate Status NvAPI_GPU_GetIRQ(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint gpuIRQ);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetLogicalFBWidthAndLocation)]
|
||||
public delegate Status NvAPI_GPU_GetLogicalFBWidthAndLocation(
|
||||
[In] LogicalGPUHandle logicalGpu,
|
||||
[Out] out uint width,
|
||||
[Out] out uint location);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetMemoryInfo)]
|
||||
public delegate Status NvAPI_GPU_GetMemoryInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In]
|
||||
[Accepts(typeof(DisplayDriverMemoryInfoV3), typeof(DisplayDriverMemoryInfoV2),
|
||||
typeof(DisplayDriverMemoryInfoV1))]
|
||||
ValueTypeReference memoryInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetOutputType)]
|
||||
public delegate Status NvAPI_GPU_GetOutputType(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] uint outputId,
|
||||
[Out] out OutputType outputType);
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetPartitionCount)]
|
||||
public delegate Status NvAPI_GPU_GetPartitionCount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetPCIEInfo)]
|
||||
public delegate Status NvAPI_GPU_GetPCIEInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivatePCIeInfoV2))] [In]
|
||||
ValueTypeReference pcieInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetPCIIdentifiers)]
|
||||
public delegate Status NvAPI_GPU_GetPCIIdentifiers(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint deviceId,
|
||||
[Out] out uint subSystemId,
|
||||
[Out] out uint revisionId,
|
||||
[Out] out uint extDeviceId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetPerfDecreaseInfo)]
|
||||
public delegate Status NvAPI_GPU_GetPerfDecreaseInfo(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[Out] out PerformanceDecreaseReason performanceDecreaseReason);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetPhysicalFrameBufferSize)]
|
||||
public delegate Status NvAPI_GPU_GetPhysicalFrameBufferSize(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint size);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetPstates20)]
|
||||
public delegate Status NvAPI_GPU_GetPStates20(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(
|
||||
typeof(PerformanceStates20InfoV1),
|
||||
typeof(PerformanceStates20InfoV2),
|
||||
typeof(PerformanceStates20InfoV3)
|
||||
)]
|
||||
[In]
|
||||
ValueTypeReference performanceStatesInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetPstatesInfoEx)]
|
||||
public delegate Status NvAPI_GPU_GetPStatesInfoEx(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(
|
||||
typeof(PerformanceStatesInfoV3),
|
||||
typeof(PerformanceStatesInfoV2),
|
||||
typeof(PerformanceStatesInfoV1)
|
||||
)]
|
||||
[In]
|
||||
ValueTypeReference performanceStatesInfo,
|
||||
[In] GetPerformanceStatesInfoFlags flags);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetQuadroStatus)]
|
||||
public delegate Status NvAPI_GPU_GetQuadroStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint isQuadro);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetRamBankCount)]
|
||||
public delegate Status NvAPI_GPU_GetRamBankCount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetRamBusWidth)]
|
||||
public delegate Status NvAPI_GPU_GetRamBusWidth(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint busWidth);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetRamMaker)]
|
||||
public delegate Status NvAPI_GPU_GetRamMaker(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out GPUMemoryMaker maker);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetRamType)]
|
||||
public delegate Status NvAPI_GPU_GetRamType(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out GPUMemoryType type);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetROPCount)]
|
||||
public delegate Status NvAPI_GPU_GetROPCount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetShaderPipeCount)]
|
||||
public delegate Status NvAPI_GPU_GetShaderPipeCount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetShaderSubPipeCount)]
|
||||
public delegate Status NvAPI_GPU_GetShaderSubPipeCount(
|
||||
[In] PhysicalGPUHandle gpuHandle,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetShortName)]
|
||||
public delegate Status NvAPI_GPU_GetShortName(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out ShortString name);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetSystemType)]
|
||||
public delegate Status NvAPI_GPU_GetSystemType(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out SystemType systemType);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetTachReading)]
|
||||
public delegate Status NvAPI_GPU_GetTachReading(
|
||||
[In] PhysicalGPUHandle gpuHandle,
|
||||
[Out] out uint value);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetThermalPoliciesInfo)]
|
||||
public delegate Status NvAPI_GPU_GetThermalPoliciesInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateThermalPoliciesInfoV2))] [In]
|
||||
ValueTypeReference info);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetThermalPoliciesStatus)]
|
||||
public delegate Status NvAPI_GPU_GetThermalPoliciesStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateThermalPoliciesStatusV2))] [In]
|
||||
ValueTypeReference info);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetThermalSettings)]
|
||||
public delegate Status NvAPI_GPU_GetThermalSettings(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] ThermalSettingsTarget sensorIndex,
|
||||
[In] [Accepts(typeof(ThermalSettingsV2), typeof(ThermalSettingsV1))]
|
||||
ValueTypeReference thermalSettings);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetTotalSMCount)]
|
||||
public delegate Status NvAPI_GPU_GetTotalSMCount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetTotalSPCount)]
|
||||
public delegate Status NvAPI_GPU_GetTotalSPCount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetTotalTPCCount)]
|
||||
public delegate Status NvAPI_GPU_GetTotalTPCCount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetUsages)]
|
||||
public delegate Status NvAPI_GPU_GetUsages(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateUsagesInfoV1))]
|
||||
ValueTypeReference usageInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetVbiosOEMRevision)]
|
||||
public delegate Status NvAPI_GPU_GetVbiosOEMRevision(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint biosOEMRevision);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetVbiosRevision)]
|
||||
public delegate Status NvAPI_GPU_GetVbiosRevision(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint biosRevision);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetVbiosVersionString)]
|
||||
public delegate Status NvAPI_GPU_GetVbiosVersionString(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out ShortString biosVersion);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetVFPCurve)]
|
||||
public delegate Status NvAPI_GPU_GetVFPCurve(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateVFPCurveV1))]
|
||||
ValueTypeReference vfpCurve);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetVirtualFrameBufferSize)]
|
||||
public delegate Status NvAPI_GPU_GetVirtualFrameBufferSize(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint size);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_GetVPECount)]
|
||||
public delegate Status NvAPI_GPU_GetVPECount(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Out] out uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_PerfPoliciesGetInfo)]
|
||||
public delegate Status NvAPI_GPU_PerfPoliciesGetInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivatePerformanceInfoV1))]
|
||||
ValueTypeReference performanceInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_PerfPoliciesGetStatus)]
|
||||
public delegate Status NvAPI_GPU_PerfPoliciesGetStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivatePerformanceStatusV1))]
|
||||
ValueTypeReference performanceStatus);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_QueryActiveApps)]
|
||||
public delegate Status NvAPI_GPU_QueryActiveApps(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[In] [Accepts(typeof(PrivateActiveApplicationV2))]
|
||||
ValueTypeArray applications,
|
||||
[In] [Out] ref uint numberOfApplications
|
||||
);
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_QueryIlluminationSupport)]
|
||||
public delegate Status NvAPI_GPU_QueryIlluminationSupport(
|
||||
[Accepts(typeof(QueryIlluminationSupportParameterV1))] [In]
|
||||
ValueTypeReference illuminationSupportInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ResetECCErrorInfo)]
|
||||
public delegate Status NvAPI_GPU_ResetECCErrorInfo(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] byte resetCurrent,
|
||||
[In] byte resetAggregated
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_RestoreCoolerPolicyTable)]
|
||||
public delegate Status NvAPI_GPU_RestoreCoolerPolicyTable(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] uint[] indexes,
|
||||
[In] uint indexesCount,
|
||||
[In] CoolerPolicy policy);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_RestoreCoolerSettings)]
|
||||
public delegate Status NvAPI_GPU_RestoreCoolerSettings(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] uint[] indexes,
|
||||
[In] uint indexesCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetClockBoostLock)]
|
||||
public delegate Status NvAPI_GPU_SetClockBoostLock(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateClockBoostLockV2))]
|
||||
ValueTypeReference clockLocks);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetClockBoostTable)]
|
||||
public delegate Status NvAPI_GPU_SetClockBoostTable(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateClockBoostTableV1))]
|
||||
ValueTypeReference boostTable);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetCoolerLevels)]
|
||||
public delegate Status NvAPI_GPU_SetCoolerLevels(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] uint index,
|
||||
[In] [Accepts(typeof(PrivateCoolerLevelsV1))]
|
||||
ValueTypeReference coolerLevels,
|
||||
[In] uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetCoolerPolicyTable)]
|
||||
public delegate Status NvAPI_GPU_SetCoolerPolicyTable(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] uint index,
|
||||
[In] [Accepts(typeof(PrivateCoolerPolicyTableV1))]
|
||||
ValueTypeReference coolerLevels,
|
||||
[In] uint count);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetCoreVoltageBoostPercent)]
|
||||
public delegate Status NvAPI_GPU_SetCoreVoltageBoostPercent(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(PrivateVoltageBoostPercentV1))]
|
||||
ValueTypeReference voltageBoostPercent);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetECCConfiguration)]
|
||||
public delegate Status NvAPI_GPU_SetECCConfiguration(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] byte isEnable,
|
||||
[In] byte isEnableImmediately
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetEDID)]
|
||||
public delegate Status NvAPI_GPU_SetEDID(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] uint outputId,
|
||||
[Accepts(typeof(EDIDV3), typeof(EDIDV2), typeof(EDIDV1))] [In]
|
||||
ValueTypeReference edid);
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetIllumination)]
|
||||
public delegate Status NvAPI_GPU_SetIllumination(
|
||||
[Accepts(typeof(SetIlluminationParameterV1))] [In]
|
||||
ValueTypeReference illuminationInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetPstates20)]
|
||||
public delegate Status NvAPI_GPU_SetPStates20(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PerformanceStates20InfoV3), typeof(PerformanceStates20InfoV2),
|
||||
typeof(PerformanceStates20InfoV1))]
|
||||
[In]
|
||||
ValueTypeReference performanceStatesInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_SetThermalPoliciesStatus)]
|
||||
public delegate Status NvAPI_GPU_SetThermalPoliciesStatus(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[Accepts(typeof(PrivateThermalPoliciesStatusV2))] [In]
|
||||
ValueTypeReference info);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GPU_ValidateOutputCombination)]
|
||||
public delegate Status NvAPI_GPU_ValidateOutputCombination(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] OutputId outputMask);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_I2CRead)]
|
||||
public delegate Status NvAPI_I2CRead(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(I2CInfoV3), typeof(I2CInfoV2))] ValueTypeReference i2cInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_I2CWrite)]
|
||||
public delegate Status NvAPI_I2CWrite(
|
||||
[In] PhysicalGPUHandle physicalGpu,
|
||||
[In] [Accepts(typeof(I2CInfoV3), typeof(I2CInfoV2))] ValueTypeReference i2cInfo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SYS_GetDisplayIdFromGpuAndOutputId)]
|
||||
public delegate Status NvAPI_SYS_GetDisplayIdFromGpuAndOutputId(
|
||||
[In] PhysicalGPUHandle gpu,
|
||||
[In] OutputId outputId,
|
||||
[Out] out uint displayId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SYS_GetGpuAndOutputIdFromDisplayId)]
|
||||
public delegate Status NvAPI_SYS_GetGpuAndOutputIdFromDisplayId(
|
||||
[In] uint displayId,
|
||||
[Out] out PhysicalGPUHandle gpu,
|
||||
[Out] out OutputId outputId);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SYS_GetPhysicalGpuFromDisplayId)]
|
||||
public delegate Status NvAPI_SYS_GetPhysicalGpuFromDisplayId(
|
||||
[In] uint displayId,
|
||||
[Out] out PhysicalGPUHandle gpu);
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Attributes;
|
||||
using NvAPIWrapper.Native.General;
|
||||
using NvAPIWrapper.Native.General.Structures;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
using NvAPIWrapper.Native.Helpers.Structures;
|
||||
|
||||
// ReSharper disable InconsistentNaming
|
||||
|
||||
namespace NvAPIWrapper.Native.Delegates
|
||||
{
|
||||
internal static class General
|
||||
{
|
||||
[FunctionId(FunctionId.NvAPI_GetErrorMessage)]
|
||||
public delegate Status NvAPI_GetErrorMessage([In] Status status, out ShortString message);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_GetInterfaceVersionString)]
|
||||
public delegate Status NvAPI_GetInterfaceVersionString(out ShortString version);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Initialize)]
|
||||
public delegate Status NvAPI_Initialize();
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_RestartDisplayDriver)]
|
||||
public delegate Status NvAPI_RestartDisplayDriver();
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SYS_GetChipSetInfo)]
|
||||
public delegate Status NvAPI_SYS_GetChipSetInfo(
|
||||
[In] [Accepts(typeof(ChipsetInfoV4), typeof(ChipsetInfoV3), typeof(ChipsetInfoV2), typeof(ChipsetInfoV1))]
|
||||
ValueTypeReference chipsetInfo);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SYS_GetDriverAndBranchVersion)]
|
||||
public delegate Status NvAPI_SYS_GetDriverAndBranchVersion(
|
||||
out uint driverVersion,
|
||||
out ShortString buildBranchString);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_SYS_GetLidAndDockInfo)]
|
||||
public delegate Status NvAPI_SYS_GetLidAndDockInfo([In] [Out] ref LidDockParameters lidAndDock);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Unload)]
|
||||
public delegate Status NvAPI_Unload();
|
||||
}
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Attributes;
|
||||
using NvAPIWrapper.Native.General;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
using NvAPIWrapper.Native.Helpers.Structures;
|
||||
using NvAPIWrapper.Native.Mosaic;
|
||||
using NvAPIWrapper.Native.Mosaic.Structures;
|
||||
|
||||
// ReSharper disable InconsistentNaming
|
||||
|
||||
namespace NvAPIWrapper.Native.Delegates
|
||||
{
|
||||
internal static class Mosaic
|
||||
{
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_EnableCurrentTopo)]
|
||||
public delegate Status NvAPI_Mosaic_EnableCurrentTopo(uint enable);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_EnumDisplayGrids)]
|
||||
public delegate Status NvAPI_Mosaic_EnumDisplayGrids(
|
||||
[Accepts(typeof(GridTopologyV2), typeof(GridTopologyV1))] [In] [Out]
|
||||
ValueTypeArray gridTopology,
|
||||
[In] [Out] ref uint gridCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_EnumDisplayModes)]
|
||||
public delegate Status NvAPI_Mosaic_EnumDisplayModes(
|
||||
[Accepts(typeof(GridTopologyV2), typeof(GridTopologyV1))] [In]
|
||||
ValueTypeReference gridTopology,
|
||||
[Accepts(typeof(DisplaySettingsV2), typeof(DisplaySettingsV1))] [In] [Out]
|
||||
ValueTypeArray
|
||||
displaysSettings,
|
||||
[In] [Out] ref uint displaysCount);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_GetCurrentTopo)]
|
||||
public delegate Status NvAPI_Mosaic_GetCurrentTopo(
|
||||
[In] [Out] ref TopologyBrief topoBrief,
|
||||
[Accepts(typeof(DisplaySettingsV2), typeof(DisplaySettingsV1))] [In] [Out]
|
||||
ValueTypeReference displaySetting,
|
||||
[Out] out int overlapX,
|
||||
[Out] out int overlapY);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_GetOverlapLimits)]
|
||||
public delegate Status NvAPI_Mosaic_GetOverlapLimits(
|
||||
[In] TopologyBrief topoBrief,
|
||||
[Accepts(typeof(DisplaySettingsV2), typeof(DisplaySettingsV1))] [In]
|
||||
ValueTypeReference displaySetting,
|
||||
[Out] out int minOverlapX,
|
||||
[Out] out int maxOverlapX,
|
||||
[Out] out int minOverlapY,
|
||||
[Out] out int maxOverlapY);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_GetSupportedTopoInfo)]
|
||||
public delegate Status NvAPI_Mosaic_GetSupportedTopoInfo(
|
||||
[Accepts(typeof(SupportedTopologiesInfoV2), typeof(SupportedTopologiesInfoV1))] [In] [Out]
|
||||
ValueTypeReference
|
||||
supportedTopoInfo,
|
||||
TopologyType topologyType);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_GetTopoGroup)]
|
||||
public delegate Status NvAPI_Mosaic_GetTopoGroup(
|
||||
[In] TopologyBrief topoBrief,
|
||||
[In] [Out] ref TopologyGroup topoGroup);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_SetCurrentTopo)]
|
||||
public delegate Status NvAPI_Mosaic_SetCurrentTopo(
|
||||
[In] TopologyBrief topoBrief,
|
||||
[Accepts(typeof(DisplaySettingsV2), typeof(DisplaySettingsV1))] [In]
|
||||
ValueTypeReference displaySetting,
|
||||
int overlapX,
|
||||
int overlapY,
|
||||
uint enable
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_SetDisplayGrids)]
|
||||
public delegate Status NvAPI_Mosaic_SetDisplayGrids(
|
||||
[Accepts(typeof(GridTopologyV2), typeof(GridTopologyV1))] [In]
|
||||
ValueTypeArray gridTopologies,
|
||||
[In] uint gridCount,
|
||||
[In] SetDisplayTopologyFlag setTopoFlags);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Mosaic_ValidateDisplayGrids)]
|
||||
public delegate Status NvAPI_Mosaic_ValidateDisplayGrids(
|
||||
[In] SetDisplayTopologyFlag setTopoFlags,
|
||||
[Accepts(typeof(GridTopologyV2), typeof(GridTopologyV1))] [In]
|
||||
ValueTypeArray gridTopologies,
|
||||
[In] [Out] ref DisplayTopologyStatus[] topoStatuses,
|
||||
[In] uint gridCount);
|
||||
}
|
||||
}
|
||||
@@ -1,248 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using NvAPIWrapper.Native.Attributes;
|
||||
using NvAPIWrapper.Native.Display.Structures;
|
||||
using NvAPIWrapper.Native.General;
|
||||
using NvAPIWrapper.Native.Helpers;
|
||||
using NvAPIWrapper.Native.Helpers.Structures;
|
||||
using NvAPIWrapper.Native.Stereo;
|
||||
using NvAPIWrapper.Native.Stereo.Structures;
|
||||
|
||||
// ReSharper disable InconsistentNaming
|
||||
namespace NvAPIWrapper.Native.Delegates
|
||||
{
|
||||
internal static class Stereo
|
||||
{
|
||||
[FunctionId(FunctionId.NvAPI_D3D1x_CreateSwapChain)]
|
||||
public delegate Status NvAPI_D3D1x_CreateSwapChain(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] IntPtr dxgiSwapChainDescription,
|
||||
[Out] out IntPtr dxgiSwapChain,
|
||||
[In] StereoSwapChainMode mode
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_D3D9_CreateSwapChain)]
|
||||
public delegate Status NvAPI_D3D9_CreateSwapChain(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] IntPtr d3dPresentParameters,
|
||||
[Out] out IntPtr direct3DSwapChain9,
|
||||
[In] StereoSwapChainMode mode
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_Activate)]
|
||||
public delegate Status NvAPI_Stereo_Activate(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_CaptureJpegImage)]
|
||||
public delegate Status NvAPI_Stereo_CaptureJpegImage(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] uint quality
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_CapturePngImage)]
|
||||
public delegate Status NvAPI_Stereo_CapturePngImage(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_CreateConfigurationProfileRegistryKey)]
|
||||
public delegate Status NvAPI_Stereo_CreateConfigurationProfileRegistryKey(
|
||||
[In] StereoRegistryProfileType registryProfileType
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_CreateHandleFromIUnknown)]
|
||||
public delegate Status NvAPI_Stereo_CreateHandleFromIUnknown(
|
||||
[In] IntPtr d3dDevice,
|
||||
[Out] out StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_Deactivate)]
|
||||
public delegate Status NvAPI_Stereo_Deactivate(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_Debug_WasLastDrawStereoized)]
|
||||
public delegate Status NvAPI_Stereo_Debug_WasLastDrawStereoized(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[Out] out byte wasStereo
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_DecreaseConvergence)]
|
||||
public delegate Status NvAPI_Stereo_DecreaseConvergence(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_DecreaseSeparation)]
|
||||
public delegate Status NvAPI_Stereo_DecreaseSeparation(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_DeleteConfigurationProfileRegistryKey)]
|
||||
public delegate Status NvAPI_Stereo_DeleteConfigurationProfileRegistryKey(
|
||||
[In] StereoRegistryProfileType registryProfileType
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_DeleteConfigurationProfileValue)]
|
||||
public delegate Status NvAPI_Stereo_DeleteConfigurationProfileValue(
|
||||
[In] StereoRegistryProfileType registryProfileType,
|
||||
[In] StereoRegistryIdentification registryId
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_DestroyHandle)]
|
||||
public delegate Status NvAPI_Stereo_DestroyHandle(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_Disable)]
|
||||
public delegate Status NvAPI_Stereo_Disable();
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_Enable)]
|
||||
public delegate Status NvAPI_Stereo_Enable();
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_GetConvergence)]
|
||||
public delegate Status NvAPI_Stereo_GetConvergence(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[Out] out float convergence
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_GetDefaultProfile)]
|
||||
public delegate Status NvAPI_Stereo_GetDefaultProfile(
|
||||
[In] uint bufferSize,
|
||||
[In] IntPtr stringBuffer,
|
||||
[Out] out uint stringSize
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_GetEyeSeparation)]
|
||||
public delegate Status NvAPI_Stereo_GetEyeSeparation(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[Out] out float separation
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_GetFrustumAdjustMode)]
|
||||
public delegate Status NvAPI_Stereo_GetFrustumAdjustMode(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[Out] out StereoFrustumAdjustMode frustumAdjustMode
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_GetSeparation)]
|
||||
public delegate Status NvAPI_Stereo_GetSeparation(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[Out] out float separationPercentage
|
||||
);
|
||||
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_GetStereoSupport)]
|
||||
public delegate Status NvAPI_Stereo_GetStereoSupport(
|
||||
[In] IntPtr monitorHandle,
|
||||
[In] [Accepts(typeof(StereoCapabilitiesV1))]
|
||||
ValueTypeReference capabilities
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_GetSurfaceCreationMode)]
|
||||
public delegate Status NvAPI_Stereo_GetSurfaceCreationMode(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[Out] out StereoSurfaceCreateMode surfaceCreateMode
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_IncreaseConvergence)]
|
||||
public delegate Status NvAPI_Stereo_IncreaseConvergence(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_IncreaseSeparation)]
|
||||
public delegate Status NvAPI_Stereo_IncreaseSeparation(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_InitActivation)]
|
||||
public delegate Status NvAPI_Stereo_InitActivation(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] StereoActivationFlag flag
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_IsActivated)]
|
||||
public delegate Status NvAPI_Stereo_IsActivated(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[Out] out byte isStereoActive
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_IsEnabled)]
|
||||
public delegate Status NvAPI_Stereo_IsEnabled([Out] out byte isEnable);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_IsWindowedModeSupported)]
|
||||
public delegate Status NvAPI_Stereo_IsWindowedModeSupported([Out] out byte isEnable);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_ReverseStereoBlitControl)]
|
||||
public delegate Status NvAPI_Stereo_ReverseStereoBlitControl(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] byte turnOn
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetActiveEye)]
|
||||
public delegate Status NvAPI_Stereo_SetActiveEye(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] StereoActiveEye activeEye
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetConfigurationProfileValue)]
|
||||
public delegate Status NvAPI_Stereo_SetConfigurationProfileValueFloat(
|
||||
[In] StereoRegistryProfileType registryProfileType,
|
||||
[In] StereoRegistryIdentification registryId,
|
||||
[In] ref float value
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetConfigurationProfileValue)]
|
||||
public delegate Status NvAPI_Stereo_SetConfigurationProfileValueInteger(
|
||||
[In] StereoRegistryProfileType registryProfileType,
|
||||
[In] StereoRegistryIdentification registryId,
|
||||
[In] ref int value
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetConvergence)]
|
||||
public delegate Status NvAPI_Stereo_SetConvergence(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] float newConvergence
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetDefaultProfile)]
|
||||
public delegate Status NvAPI_Stereo_SetDefaultProfile(
|
||||
[In] [MarshalAs(UnmanagedType.LPStr)] string profileName
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetDriverMode)]
|
||||
public delegate Status NvAPI_Stereo_SetDriverMode(
|
||||
[In] StereoDriverMode driverMode
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetFrustumAdjustMode)]
|
||||
public delegate Status NvAPI_Stereo_SetFrustumAdjustMode(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] StereoFrustumAdjustMode frustumAdjustMode
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetNotificationMessage)]
|
||||
public delegate Status NvAPI_Stereo_SetNotificationMessage(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] ulong windowHandle,
|
||||
[In] ulong messageId
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetSeparation)]
|
||||
public delegate Status NvAPI_Stereo_SetSeparation(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] float newSeparationPercentage
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_SetSurfaceCreationMode)]
|
||||
public delegate Status NvAPI_Stereo_SetSurfaceCreationMode(
|
||||
[In] StereoHandle stereoHandle,
|
||||
[In] StereoSurfaceCreateMode newSurfaceCreateMode
|
||||
);
|
||||
|
||||
[FunctionId(FunctionId.NvAPI_Stereo_Trigger_Activation)]
|
||||
public delegate Status NvAPI_Stereo_Trigger_Activation(
|
||||
[In] StereoHandle stereoHandle
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible values for color data color space
|
||||
/// </summary>
|
||||
public enum ColorDataColorimetry : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// RGB color space
|
||||
/// </summary>
|
||||
RGB = 0,
|
||||
|
||||
/// <summary>
|
||||
/// YCC601 color space
|
||||
/// </summary>
|
||||
YCC601,
|
||||
|
||||
/// <summary>
|
||||
/// YCC709 color space
|
||||
/// </summary>
|
||||
YCC709,
|
||||
|
||||
/// <summary>
|
||||
/// XVYCC601 color space
|
||||
/// </summary>
|
||||
XVYCC601,
|
||||
|
||||
/// <summary>
|
||||
/// XVYCC709 color space
|
||||
/// </summary>
|
||||
XVYCC709,
|
||||
|
||||
/// <summary>
|
||||
/// SYCC601 color space
|
||||
/// </summary>
|
||||
SYCC601,
|
||||
|
||||
/// <summary>
|
||||
/// ADOBEYCC601 color space
|
||||
/// </summary>
|
||||
ADOBEYCC601,
|
||||
|
||||
/// <summary>
|
||||
/// ADOBERGB color space
|
||||
/// </summary>
|
||||
ADOBERGB,
|
||||
|
||||
/// <summary>
|
||||
/// BT2020RGB color space
|
||||
/// </summary>
|
||||
BT2020RGB,
|
||||
|
||||
/// <summary>
|
||||
/// BT2020YCC color space
|
||||
/// </summary>
|
||||
BT2020YCC,
|
||||
|
||||
/// <summary>
|
||||
/// BT2020cYCC color space
|
||||
/// </summary>
|
||||
// ReSharper disable once InconsistentNaming
|
||||
BT2020cYCC,
|
||||
|
||||
/// <summary>
|
||||
/// Default color space
|
||||
/// </summary>
|
||||
Default = 0xFE,
|
||||
|
||||
/// <summary>
|
||||
/// Automatically select color space
|
||||
/// </summary>
|
||||
Auto = 0xFF
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible values for the color data command
|
||||
/// </summary>
|
||||
public enum ColorDataCommand : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Get the current color data
|
||||
/// </summary>
|
||||
Get = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Set the current color data
|
||||
/// </summary>
|
||||
Set,
|
||||
|
||||
/// <summary>
|
||||
/// Check if the passed color data is supported
|
||||
/// </summary>
|
||||
IsSupportedColor,
|
||||
|
||||
/// <summary>
|
||||
/// Get the default color data
|
||||
/// </summary>
|
||||
GetDefault
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible values for the color data depth
|
||||
/// </summary>
|
||||
public enum ColorDataDepth : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Default color depth meaning that the current setting should be kept
|
||||
/// </summary>
|
||||
Default = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 6bit per color depth
|
||||
/// </summary>
|
||||
BPC6 = 1,
|
||||
|
||||
/// <summary>
|
||||
/// 8bit per color depth
|
||||
/// </summary>
|
||||
BPC8 = 2,
|
||||
|
||||
/// <summary>
|
||||
/// 10bit per color depth
|
||||
/// </summary>
|
||||
BPC10 = 3,
|
||||
|
||||
/// <summary>
|
||||
/// 12bit per color depth
|
||||
/// </summary>
|
||||
BPC12 = 4,
|
||||
|
||||
/// <summary>
|
||||
/// 16bit per color depth
|
||||
/// </summary>
|
||||
BPC16 = 5
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible values for the color data desktop color depth
|
||||
/// </summary>
|
||||
public enum ColorDataDesktopDepth : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Default color depth meaning that the current setting should be kept
|
||||
/// </summary>
|
||||
Default = 0x0,
|
||||
|
||||
/// <summary>
|
||||
/// 8bit per integer color component
|
||||
/// </summary>
|
||||
BPC8 = 0x1,
|
||||
|
||||
/// <summary>
|
||||
/// 10bit integer per color component
|
||||
/// </summary>
|
||||
BPC10 = 0x2,
|
||||
|
||||
/// <summary>
|
||||
/// 16bit float per color component
|
||||
/// </summary>
|
||||
BPC16Float = 0x3,
|
||||
|
||||
/// <summary>
|
||||
/// 16bit float per color component wide color gamut
|
||||
/// </summary>
|
||||
BPC16FloatWcg = 0x4,
|
||||
|
||||
/// <summary>
|
||||
/// 16bit float per color component HDR
|
||||
/// </summary>
|
||||
BPC16FloatHDR = 0x5
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible values for color data dynamic range
|
||||
/// </summary>
|
||||
public enum ColorDataDynamicRange : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// VESA standard progress signal
|
||||
/// </summary>
|
||||
VESA = 0,
|
||||
|
||||
/// <summary>
|
||||
/// CEA interlaced signal
|
||||
/// </summary>
|
||||
CEA,
|
||||
|
||||
/// <summary>
|
||||
/// Automatically select the best value
|
||||
/// </summary>
|
||||
Auto
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible color data color format values
|
||||
/// </summary>
|
||||
public enum ColorDataFormat : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// RGB color format
|
||||
/// </summary>
|
||||
RGB = 0,
|
||||
|
||||
/// <summary>
|
||||
/// YUV422 color format
|
||||
/// </summary>
|
||||
YUV422,
|
||||
|
||||
/// <summary>
|
||||
/// YUV444 color format
|
||||
/// </summary>
|
||||
YUV444,
|
||||
|
||||
/// <summary>
|
||||
/// YUV420 color format
|
||||
/// </summary>
|
||||
YUV420,
|
||||
|
||||
/// <summary>
|
||||
/// Default color format
|
||||
/// </summary>
|
||||
Default = 0xFE,
|
||||
|
||||
/// <summary>
|
||||
/// Automatically select the best color format
|
||||
/// </summary>
|
||||
Auto = 0xFF
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible values for the HDR color data command
|
||||
/// </summary>
|
||||
public enum ColorDataHDRCommand : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Get the current HDR color data
|
||||
/// </summary>
|
||||
Get = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Set the current HDR color data
|
||||
/// </summary>
|
||||
Set = 1
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible color data HDR modes
|
||||
/// </summary>
|
||||
public enum ColorDataHDRMode : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Turn off HDR.
|
||||
/// </summary>
|
||||
Off = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Source: CCCS [a.k.a FP16 scRGB, linear, sRGB primaries, [-65504,0, 65504] range, RGB(1,1,1) = 80nits]
|
||||
/// Output: UHDA HDR [a.k.a HDR10, RGB/YCC 10/12bpc ST2084(PQ) EOTF RGB(1,1,1) = 10000 nits, Rec2020 color primaries,
|
||||
/// ST2086 static HDR metadata].
|
||||
/// This is the only supported production HDR mode.
|
||||
/// </summary>
|
||||
UHDA = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Source: CCCS (a.k.a FP16 scRGB)
|
||||
/// Output: EDR (Extended Dynamic Range) - HDR content is tone-mapped and gamut mapped to output on regular SDR display
|
||||
/// set to max luminance ( ~300 nits ).
|
||||
/// </summary>
|
||||
[Obsolete("Do not use! Internal test mode only, to be removed.", false)]
|
||||
EDR = 3,
|
||||
|
||||
/// <summary>
|
||||
/// Source: any
|
||||
/// Output: SDR (Standard Dynamic Range), we continuously send SDR EOTF InfoFrame signaling, HDMI compliance testing.
|
||||
/// </summary>
|
||||
[Obsolete("Do not use! Internal test mode only, to be removed.", false)]
|
||||
SDR = 4,
|
||||
|
||||
/// <summary>
|
||||
/// Source: HDR10 RGB 10bpc
|
||||
/// Output: HDR10 RGB 10 colorDepth - signal UHDA HDR mode (PQ + Rec2020) to the sink but send source pixel values
|
||||
/// unmodified (no PQ or Rec2020 conversions) - assumes source is already in HDR10 format.
|
||||
/// </summary>
|
||||
[Obsolete("Experimental mode only, not for production!", false)]
|
||||
UHDAPassthrough = 5,
|
||||
|
||||
/// <summary>
|
||||
/// Source: CCCS (a.k.a FP16 scRGB)
|
||||
/// Output: notebook HDR
|
||||
/// </summary>
|
||||
[Obsolete("Do not use! Internal test mode only, to be removed.", false)]
|
||||
UHDANB = 6,
|
||||
|
||||
/// <summary>
|
||||
/// Source: RGB8 Dolby Vision encoded (12 colorDepth YCbCr422 packed into RGB8)
|
||||
/// Output: Dolby Vision encoded : Application is to encoded frames in DV format and embed DV dynamic metadata as
|
||||
/// described in Dolby Vision specification.
|
||||
/// </summary>
|
||||
[Obsolete("Experimental mode only, not for production!", false)]
|
||||
DolbyVision = 7
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Possible values for the color data selection policy
|
||||
/// </summary>
|
||||
public enum ColorDataSelectionPolicy : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Application or the Nvidia Control Panel user configuration are used to decide the best color format
|
||||
/// </summary>
|
||||
User = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Driver or the Operating System decides the best color format
|
||||
/// </summary>
|
||||
BestQuality = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Default value, <see cref="BestQuality" />
|
||||
/// </summary>
|
||||
Default = BestQuality,
|
||||
|
||||
/// <summary>
|
||||
/// Unknown policy
|
||||
/// </summary>
|
||||
Unknown = 0xFF
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Possible color formats
|
||||
/// </summary>
|
||||
public enum ColorFormat
|
||||
{
|
||||
/// <summary>
|
||||
/// Unknown, driver will choose one automatically.
|
||||
/// </summary>
|
||||
Unknown = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 8bpp mode
|
||||
/// </summary>
|
||||
P8 = 41,
|
||||
|
||||
/// <summary>
|
||||
/// 16bpp mode
|
||||
/// </summary>
|
||||
R5G6B5 = 23,
|
||||
|
||||
/// <summary>
|
||||
/// 32bpp mode
|
||||
/// </summary>
|
||||
A8R8G8B8 = 21,
|
||||
|
||||
/// <summary>
|
||||
/// 64bpp (floating point)
|
||||
/// </summary>
|
||||
A16B16G16R16F = 113
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Flags for applying settings, used by NvAPI_DISP_SetDisplayConfig()
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum DisplayConfigFlags
|
||||
{
|
||||
/// <summary>
|
||||
/// None
|
||||
/// </summary>
|
||||
None = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Do not apply
|
||||
/// </summary>
|
||||
ValidateOnly = 0x00000001,
|
||||
|
||||
/// <summary>
|
||||
/// Save to the persistence storage
|
||||
/// </summary>
|
||||
SaveToPersistence = 0x00000002,
|
||||
|
||||
/// <summary>
|
||||
/// Driver reload is permitted if necessary
|
||||
/// </summary>
|
||||
DriverReloadAllowed = 0x00000004,
|
||||
|
||||
/// <summary>
|
||||
/// Refresh OS mode list.
|
||||
/// </summary>
|
||||
ForceModeEnumeration = 0x00000008,
|
||||
|
||||
/// <summary>
|
||||
/// Tell OS to avoid optimizing CommitVidPn call during a modeset
|
||||
/// </summary>
|
||||
ForceCommitVideoPresentNetwork = 0x00000010
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Possible display port color depths
|
||||
/// </summary>
|
||||
public enum DisplayPortColorDepth : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Default color depth
|
||||
/// </summary>
|
||||
Default = 0,
|
||||
/// <summary>
|
||||
/// 6 bit per color color depth
|
||||
/// </summary>
|
||||
BPC6,
|
||||
/// <summary>
|
||||
/// 8 bit per color color depth
|
||||
/// </summary>
|
||||
BPC8,
|
||||
/// <summary>
|
||||
/// 10 bit per color color depth
|
||||
/// </summary>
|
||||
BPC10,
|
||||
/// <summary>
|
||||
/// 12 bit per color color depth
|
||||
/// </summary>
|
||||
BPC12,
|
||||
|
||||
/// <summary>
|
||||
/// 16 bit per color color depth
|
||||
/// </summary>
|
||||
BPC16,
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Possible display port color formats
|
||||
/// </summary>
|
||||
public enum DisplayPortColorFormat : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// RGB color format
|
||||
/// </summary>
|
||||
RGB = 0,
|
||||
|
||||
/// <summary>
|
||||
/// YCbCr422 color format
|
||||
/// </summary>
|
||||
YCbCr422 = 1,
|
||||
|
||||
/// <summary>
|
||||
/// YCbCr444 color format
|
||||
/// </summary>
|
||||
YCbCr444 = 2
|
||||
}
|
||||
}
|
||||
@@ -1,300 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible audio channel allocations (speaker placements)
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioChannelAllocation : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Empty [4] Empty [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrFl = 0,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Empty [4] Empty [5] Low Frequency Effects [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
LfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Empty [4] Front Center [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Empty [4] Front Center [5] Low Frequency Effects [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Rear Center [4] Empty [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Rear Center [4] Empty [5] Low Frequency Effects [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Rear Center [4] Front Center [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RcFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Empty [3] Rear Center [4] Front Center [5] Low Frequency Effects [6] Front Right [7] Front
|
||||
/// Left
|
||||
/// </summary>
|
||||
RcFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Rear Right [3] Rear Left [4] Empty [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RrRlFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Rear Right [3] Rear Left [4] Empty [5] Low Frequency Effects [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RrRlLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Empty [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects [6] Front Right [7]
|
||||
/// Front Left
|
||||
/// </summary>
|
||||
RrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Rear Center [2] Rear Right [3] Rear Left [4] Empty [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RcRrRlFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Rear Center [2] Rear Right [3] Rear Left [4] Empty [5] Low Frequency Effects [6] Front Right [7]
|
||||
/// Front Left
|
||||
/// </summary>
|
||||
RcRrRlLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Rear Center [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RcRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Rear Center [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects [6] Front Right
|
||||
/// [7] Front Left
|
||||
/// </summary>
|
||||
RcRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Rear Right Of Center [1] Rear Left Of Center [2] Rear Right [3] Rear Left [4] Empty [5] Empty [6] Front Right
|
||||
/// [7] Front Left
|
||||
/// </summary>
|
||||
RrcRlcRrRlFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Rear Right Of Center [1] Rear Left Of Center [2] Rear Right [3] Rear Left [4] Empty [5] Low Frequency Effects
|
||||
/// [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RrcRlcRrRlLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Rear Right Of Center [1] Rear Left Of Center [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front
|
||||
/// Right [7] Front Left
|
||||
/// </summary>
|
||||
RrcRlcRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Rear Right Of Center [1] Rear Left Of Center [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency
|
||||
/// Effects [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
RrcRlcRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Empty [4] Empty [5] Empty [6] Front Right [7]
|
||||
/// Front Left
|
||||
/// </summary>
|
||||
FrcFlcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Empty [4] Empty [5] Low Frequency Effects [6]
|
||||
/// Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Empty [4] Front Center [5] Empty [6] Front Right
|
||||
/// [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Empty [4] Front Center [5] Low Frequency Effects
|
||||
/// [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Rear Center [4] Empty [5] Empty [6] Front Right
|
||||
/// [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Rear Center [4] Empty [5] Low Frequency Effects
|
||||
/// [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Rear Center [4] Front Center [5] Empty [6] Front
|
||||
/// Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRcFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Empty [3] Rear Center [4] Front Center [5] Low Frequency
|
||||
/// Effects [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRcFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Rear Right [3] Rear Left [4] Empty [5] Empty [6] Front Right
|
||||
/// [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRrRlFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Rear Right [3] Rear Left [4] Empty [5] Low Frequency Effects
|
||||
/// [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRrRlLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6]
|
||||
/// Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Of Center [1] Front Left Of Center [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency
|
||||
/// Effects [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrcFlcRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Front Center High [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right [7] Front
|
||||
/// Left
|
||||
/// </summary>
|
||||
FchRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Empty [1] Front Center High [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects [6] Front
|
||||
/// Right [7] Front Left
|
||||
/// </summary>
|
||||
FchRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] TopCenter [1] Empty [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
TcRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] TopCenter [1] Empty [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects [6] Front Right [7]
|
||||
/// Front Left
|
||||
/// </summary>
|
||||
TcRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right High [1] Front Left High [2] Rear Right [3] Rear Left [4] Empty [5] Empty [6] Front Right [7] Front
|
||||
/// Left
|
||||
/// </summary>
|
||||
FrhFlhRrRlFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right High [1] Front Left High [2] Rear Right [3] Rear Left [4] Empty [5] Low Frequency Effects [6] Front
|
||||
/// Right [7] Front Left
|
||||
/// </summary>
|
||||
FrhFlhRrRlLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Wide [1] Front Left Wide [2] Rear Right [3] Rear Left [4] Empty [5] Empty [6] Front Right [7] Front
|
||||
/// Left
|
||||
/// </summary>
|
||||
FrwFlwRrRlFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Wide [1] Front Left Wide [2] Rear Right [3] Rear Left [4] Empty [5] Low Frequency Effects [6] Front
|
||||
/// Right [7] Front Left
|
||||
/// </summary>
|
||||
FrwFlwRrRlLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] TopCenter [1] Rear Center [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right [7] Front
|
||||
/// Left
|
||||
/// </summary>
|
||||
TcRcRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] TopCenter [1] Rear Center [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects [6] Front
|
||||
/// Right [7] Front Left
|
||||
/// </summary>
|
||||
TcRcRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Center High [1] Rear Center [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right [7]
|
||||
/// Front Left
|
||||
/// </summary>
|
||||
FchRcRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Center High [1] Rear Center [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects [6]
|
||||
/// Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FchRcRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] TopCenter [1] Front Center High [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right [7]
|
||||
/// Front Left
|
||||
/// </summary>
|
||||
TcFcRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] TopCenter [1] Front Center High [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects [6]
|
||||
/// Front Right [7] Front Left
|
||||
/// </summary>
|
||||
TcFchRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right High [1] Front Left High [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right
|
||||
/// [7] Front Left
|
||||
/// </summary>
|
||||
FrhFlhRrRlFcFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right High [1] Front Left High [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects
|
||||
/// [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrhFlhRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Wide [1] Front Left Wide [2] Rear Right [3] Rear Left [4] Front Center [5] Empty [6] Front Right
|
||||
/// [7] Front Left
|
||||
/// </summary>
|
||||
FrwFlwRrRlFcFeFl,
|
||||
|
||||
/// <summary>
|
||||
/// [0] Front Right Wide [1] Front Left Wide [2] Rear Right [3] Rear Left [4] Front Center [5] Low Frequency Effects
|
||||
/// [6] Front Right [7] Front Left
|
||||
/// </summary>
|
||||
FrwFlwRrRlFcLfeFrFl,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 511
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible audio channels
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioChannelCount : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Data is available in the header of source data
|
||||
/// </summary>
|
||||
InHeader = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Two channels
|
||||
/// </summary>
|
||||
Two,
|
||||
|
||||
/// <summary>
|
||||
/// Three channels
|
||||
/// </summary>
|
||||
Three,
|
||||
|
||||
/// <summary>
|
||||
/// Four channels
|
||||
/// </summary>
|
||||
Four,
|
||||
|
||||
/// <summary>
|
||||
/// Five channels
|
||||
/// </summary>
|
||||
Five,
|
||||
|
||||
/// <summary>
|
||||
/// Six channels
|
||||
/// </summary>
|
||||
Six,
|
||||
|
||||
/// <summary>
|
||||
/// Seven channels
|
||||
/// </summary>
|
||||
Seven,
|
||||
|
||||
/// <summary>
|
||||
/// Eight channels
|
||||
/// </summary>
|
||||
Eight,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 15
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible audio codecs
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioCodec : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Data is available in the header of source data
|
||||
/// </summary>
|
||||
InHeader = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Pulse-code modulation
|
||||
/// </summary>
|
||||
PCM,
|
||||
|
||||
/// <summary>
|
||||
/// Dolby AC-3
|
||||
/// </summary>
|
||||
AC3,
|
||||
|
||||
/// <summary>
|
||||
/// MPEG1
|
||||
/// </summary>
|
||||
MPEG1,
|
||||
|
||||
/// <summary>
|
||||
/// MP3 (MPEG-2 Audio Layer III)
|
||||
/// </summary>
|
||||
MP3,
|
||||
|
||||
/// <summary>
|
||||
/// MPEG2
|
||||
/// </summary>
|
||||
MPEG2,
|
||||
|
||||
/// <summary>
|
||||
/// Advanced Audio Coding
|
||||
/// </summary>
|
||||
AACLC,
|
||||
|
||||
/// <summary>
|
||||
/// DTS
|
||||
/// </summary>
|
||||
DTS,
|
||||
|
||||
/// <summary>
|
||||
/// Adaptive Transform Acoustic Coding
|
||||
/// </summary>
|
||||
ATRAC,
|
||||
|
||||
/// <summary>
|
||||
/// Direct Stream Digital
|
||||
/// </summary>
|
||||
DSD,
|
||||
|
||||
/// <summary>
|
||||
/// Dolby Digital Plus
|
||||
/// </summary>
|
||||
EAC3,
|
||||
|
||||
/// <summary>
|
||||
/// DTS High Definition
|
||||
/// </summary>
|
||||
DTSHD,
|
||||
|
||||
/// <summary>
|
||||
/// Meridian Lossless Packing
|
||||
/// </summary>
|
||||
MLP,
|
||||
|
||||
/// <summary>
|
||||
/// DST
|
||||
/// </summary>
|
||||
DST,
|
||||
|
||||
/// <summary>
|
||||
/// Windows Media Audio Pro
|
||||
/// </summary>
|
||||
WMAPRO,
|
||||
|
||||
/// <summary>
|
||||
/// Extended audio codec value should be used to get information regarding audio codec
|
||||
/// </summary>
|
||||
UseExtendedCodecType,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 31
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible extended audio codecs
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioExtendedCodec : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Use the primary audio codec type, data not available
|
||||
/// </summary>
|
||||
UseCodecType = 0,
|
||||
|
||||
/// <summary>
|
||||
/// High-Efficiency Advanced Audio Coding
|
||||
/// </summary>
|
||||
HEAAC,
|
||||
|
||||
/// <summary>
|
||||
/// High-Efficiency Advanced Audio Coding 2
|
||||
/// </summary>
|
||||
HEAACVersion2,
|
||||
|
||||
/// <summary>
|
||||
/// MPEG Surround
|
||||
/// </summary>
|
||||
MPEGSurround,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 63
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible audio low frequency effects channel playback level
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioLFEPlaybackLevel : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Data not available
|
||||
/// </summary>
|
||||
NoData = 0,
|
||||
|
||||
/// <summary>
|
||||
/// No change to the source audio
|
||||
/// </summary>
|
||||
Plus0Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Adds 10 decibel
|
||||
/// </summary>
|
||||
Plus10Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 7
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible audio channel level shift values
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioLevelShift : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// No change to the source audio
|
||||
/// </summary>
|
||||
Shift0Decibel = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 1 decibel
|
||||
/// </summary>
|
||||
Shift1Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 2 decibel
|
||||
/// </summary>
|
||||
Shift2Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 3 decibel
|
||||
/// </summary>
|
||||
Shift3Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 4 decibel
|
||||
/// </summary>
|
||||
Shift4Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 5 decibel
|
||||
/// </summary>
|
||||
Shift5Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 6 decibel
|
||||
/// </summary>
|
||||
Shift6Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 7 decibel
|
||||
/// </summary>
|
||||
Shift7Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 8 decibel
|
||||
/// </summary>
|
||||
Shift8Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 9 decibel
|
||||
/// </summary>
|
||||
Shift9Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 10 decibel
|
||||
/// </summary>
|
||||
Shift10Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 11 decibel
|
||||
/// </summary>
|
||||
Shift11Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 12 decibel
|
||||
/// </summary>
|
||||
Shift12Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 13 decibel
|
||||
/// </summary>
|
||||
Shift13Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 14 decibel
|
||||
/// </summary>
|
||||
Shift14Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Shifts 15 decibel
|
||||
/// </summary>
|
||||
Shift15Decibel,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 31
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible audio sample rates (sampling frequency)
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioSampleRate : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Data is available in the header of source data
|
||||
/// </summary>
|
||||
InHeader = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 31kHz sampling frequency
|
||||
/// </summary>
|
||||
F32000Hz,
|
||||
|
||||
/// <summary>
|
||||
/// 44.1kHz sampling frequency
|
||||
/// </summary>
|
||||
F44100Hz,
|
||||
|
||||
/// <summary>
|
||||
/// 48kHz sampling frequency
|
||||
/// </summary>
|
||||
F48000Hz,
|
||||
|
||||
/// <summary>
|
||||
/// 88.2kHz sampling frequency
|
||||
/// </summary>
|
||||
F88200Hz,
|
||||
|
||||
/// <summary>
|
||||
/// 96kHz sampling frequency
|
||||
/// </summary>
|
||||
F96000Hz,
|
||||
|
||||
/// <summary>
|
||||
/// 176.4kHz sampling frequency
|
||||
/// </summary>
|
||||
F176400Hz,
|
||||
|
||||
/// <summary>
|
||||
/// 192kHz sampling frequency
|
||||
/// </summary>
|
||||
F192000Hz,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 15
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible audio sample size (bit depth)
|
||||
/// </summary>
|
||||
public enum InfoFrameAudioSampleSize : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Data is available in the header of source data
|
||||
/// </summary>
|
||||
InHeader = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 16bit audio sample size
|
||||
/// </summary>
|
||||
B16,
|
||||
|
||||
/// <summary>
|
||||
/// 20bit audio sample size
|
||||
/// </summary>
|
||||
B20,
|
||||
|
||||
/// <summary>
|
||||
/// 24bit audio sample size
|
||||
/// </summary>
|
||||
B24,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 7
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible values for info-frame properties that accept or return a boolean value
|
||||
/// </summary>
|
||||
public enum InfoFrameBoolean : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// False
|
||||
/// </summary>
|
||||
False = 0,
|
||||
|
||||
/// <summary>
|
||||
/// True
|
||||
/// </summary>
|
||||
True,
|
||||
|
||||
/// <summary>
|
||||
/// Auto (Unspecified)
|
||||
/// </summary>
|
||||
Auto = 3
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Possible commands for info-frame operations
|
||||
/// </summary>
|
||||
public enum InfoFrameCommand : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns the fields in the info-frame with values set by the manufacturer (NVIDIA or OEM)
|
||||
/// </summary>
|
||||
GetDefault = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Sets the fields in the info-frame to auto, and info-frame to the default info-frame for use in a set.
|
||||
/// </summary>
|
||||
Reset,
|
||||
|
||||
/// <summary>
|
||||
/// Get the current info-frame state.
|
||||
/// </summary>
|
||||
Get,
|
||||
|
||||
/// <summary>
|
||||
/// Set the current info-frame state (flushed to the monitor), the values are one time and do not persist.
|
||||
/// </summary>
|
||||
Set,
|
||||
|
||||
/// <summary>
|
||||
/// Get the override info-frame state, non-override fields will be set to value = AUTO, overridden fields will have the
|
||||
/// current override values.
|
||||
/// </summary>
|
||||
GetOverride,
|
||||
|
||||
/// <summary>
|
||||
/// Set the override info-frame state, non-override fields will be set to value = AUTO, other values indicate override;
|
||||
/// persist across mode-set and reboot.
|
||||
/// </summary>
|
||||
SetOverride,
|
||||
|
||||
/// <summary>
|
||||
/// Get properties associated with info-frame (each of the info-frame type will have properties).
|
||||
/// </summary>
|
||||
GetProperty,
|
||||
|
||||
/// <summary>
|
||||
/// Set properties associated with info-frame.
|
||||
/// </summary>
|
||||
SetProperty
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible info-frame data type
|
||||
/// </summary>
|
||||
public enum InfoFrameDataType : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Auxiliary Video data
|
||||
/// </summary>
|
||||
AuxiliaryVideoInformation = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Audio data
|
||||
/// </summary>
|
||||
AudioInformation = 4,
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
namespace NvAPIWrapper.Native.Display
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains possible info-frame property modes
|
||||
/// </summary>
|
||||
public enum InfoFramePropertyMode : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Driver determines whether to send info-frames.
|
||||
/// </summary>
|
||||
Auto = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Driver always sends info-frame.
|
||||
/// </summary>
|
||||
Enable,
|
||||
|
||||
/// <summary>
|
||||
/// Driver never sends info-frame.
|
||||
/// </summary>
|
||||
Disable,
|
||||
|
||||
/// <summary>
|
||||
/// Driver only sends info-frame when client requests it via info-frame escape call.
|
||||
/// </summary>
|
||||
AllowOverride
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user