aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/GraphicsDriver/NVAPI
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Common/GraphicsDriver/NVAPI')
-rw-r--r--Ryujinx.Common/GraphicsDriver/NVAPI/Nvapi.cs11
-rw-r--r--Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs42
-rw-r--r--Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsApplicationV4.cs17
-rw-r--r--Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsProfile.cs16
-rw-r--r--Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsSetting.cs49
5 files changed, 135 insertions, 0 deletions
diff --git a/Ryujinx.Common/GraphicsDriver/NVAPI/Nvapi.cs b/Ryujinx.Common/GraphicsDriver/NVAPI/Nvapi.cs
new file mode 100644
index 00000000..99eaa68f
--- /dev/null
+++ b/Ryujinx.Common/GraphicsDriver/NVAPI/Nvapi.cs
@@ -0,0 +1,11 @@
+namespace Ryujinx.Common.GraphicsDriver.NVAPI
+{
+ enum Nvapi : uint
+ {
+ OglThreadControlId = 0x20C1221E,
+
+ OglThreadControlDefault = 0,
+ OglThreadControlEnable = 1,
+ OglThreadControlDisable = 2
+ }
+}
diff --git a/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs b/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs
new file mode 100644
index 00000000..6bbff2de
--- /dev/null
+++ b/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs
@@ -0,0 +1,42 @@
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Ryujinx.Common.GraphicsDriver.NVAPI
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 4)]
+ public unsafe struct NvapiUnicodeString
+ {
+ private fixed byte _data[4096];
+
+ public NvapiUnicodeString(string text)
+ {
+ Set(text);
+ }
+
+ public string Get()
+ {
+ fixed (byte* data = _data)
+ {
+ string text = Encoding.Unicode.GetString(data, 4096);
+
+ int index = text.IndexOf('\0');
+ if (index > -1)
+ {
+ text = text.Remove(index);
+ }
+
+ return text;
+ }
+ }
+
+ public void Set(string text)
+ {
+ text += '\0';
+ fixed (char* textPtr = text)
+ fixed (byte* data = _data)
+ {
+ int written = Encoding.Unicode.GetBytes(textPtr, text.Length, data, 4096);
+ }
+ }
+ }
+}
diff --git a/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsApplicationV4.cs b/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsApplicationV4.cs
new file mode 100644
index 00000000..8b472cd1
--- /dev/null
+++ b/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsApplicationV4.cs
@@ -0,0 +1,17 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Common.GraphicsDriver.NVAPI
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 4)]
+ unsafe struct NvdrsApplicationV4
+ {
+ public uint Version;
+ public uint IsPredefined;
+ public NvapiUnicodeString AppName;
+ public NvapiUnicodeString UserFriendlyName;
+ public NvapiUnicodeString Launcher;
+ public NvapiUnicodeString FileInFolder;
+ public uint Flags;
+ public NvapiUnicodeString CommandLine;
+ }
+}
diff --git a/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsProfile.cs b/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsProfile.cs
new file mode 100644
index 00000000..5a325d08
--- /dev/null
+++ b/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsProfile.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Common.GraphicsDriver.NVAPI
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ unsafe struct NvdrsProfile
+ {
+ public uint Version;
+ public NvapiUnicodeString ProfileName;
+ public uint GpuSupport;
+ public uint IsPredefined;
+ public uint NumOfApps;
+ public uint NumOfSettings;
+ }
+}
diff --git a/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsSetting.cs b/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsSetting.cs
new file mode 100644
index 00000000..ac188b35
--- /dev/null
+++ b/Ryujinx.Common/GraphicsDriver/NVAPI/NvdrsSetting.cs
@@ -0,0 +1,49 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Common.GraphicsDriver.NVAPI
+{
+ enum NvdrsSettingType : uint
+ {
+ NvdrsDwordType,
+ NvdrsBinaryType,
+ NvdrsStringType,
+ NvdrsWstringType,
+ }
+
+ enum NvdrsSettingLocation : uint
+ {
+ NvdrsCurrentProfileLocation,
+ NvdrsGlobalProfileLocation,
+ NvdrsBaseProfileLocation,
+ NvdrsDefaultProfileLocation,
+ }
+
+ [StructLayout(LayoutKind.Explicit, Size = 0x3020)]
+ unsafe struct NvdrsSetting
+ {
+ [FieldOffset(0x0)]
+ public uint Version;
+ [FieldOffset(0x4)]
+ public NvapiUnicodeString SettingName;
+ [FieldOffset(0x1004)]
+ public Nvapi SettingId;
+ [FieldOffset(0x1008)]
+ public NvdrsSettingType SettingType;
+ [FieldOffset(0x100C)]
+ public NvdrsSettingLocation SettingLocation;
+ [FieldOffset(0x1010)]
+ public uint IsCurrentPredefined;
+ [FieldOffset(0x1014)]
+ public uint IsPredefinedValid;
+
+ [FieldOffset(0x1018)]
+ public uint PredefinedValue;
+ [FieldOffset(0x1018)]
+ public NvapiUnicodeString PredefinedString;
+
+ [FieldOffset(0x201C)]
+ public uint CurrentValue;
+ [FieldOffset(0x201C)]
+ public NvapiUnicodeString CurrentString;
+ }
+}