aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs
diff options
context:
space:
mode:
authorEmulationFanatic <62343878+EmulationFanatic@users.noreply.github.com>2021-05-19 11:39:19 -0700
committerGitHub <noreply@github.com>2021-05-19 11:39:19 -0700
commitb5c72b44dee2fd977d7cca5aa3c29ef1e2286aa7 (patch)
treeae064aca256cb6193f6908cc9698660043754008 /Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs
parent0129250c2e169c7386f7e2868cc055f8ec55c005 (diff)
parent778011c12ae7905173e02665f397a96686863b89 (diff)
Merge pull request #2177 from riperiperi/feature/parallel-shader-cache
Allow parallel shader compilation when loading a shader cache
Diffstat (limited to 'Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs')
-rw-r--r--Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs42
1 files changed, 42 insertions, 0 deletions
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);
+ }
+ }
+ }
+}