diff --git a/Directory.Packages.props b/Directory.Packages.props
index 099bce9a4..c2ac358ed 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -3,22 +3,22 @@
true
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
@@ -26,7 +26,7 @@
-
+
@@ -48,11 +48,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/src/Ryujinx.Common/RyujinxException.cs b/src/Ryujinx.Common/RyujinxException.cs
new file mode 100644
index 000000000..dbb5184e4
--- /dev/null
+++ b/src/Ryujinx.Common/RyujinxException.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace Ryujinx.Common
+{
+ public class RyujinxException : Exception
+ {
+ public RyujinxException(string message) : base(message)
+ { }
+ }
+}
diff --git a/src/Ryujinx.Graphics.Vulkan/Vendor.cs b/src/Ryujinx.Graphics.Vulkan/Vendor.cs
index 55ae0cd81..6a2a76a88 100644
--- a/src/Ryujinx.Graphics.Vulkan/Vendor.cs
+++ b/src/Ryujinx.Graphics.Vulkan/Vendor.cs
@@ -92,7 +92,7 @@ namespace Ryujinx.Graphics.Vulkan
DriverId.MesaDozen => "Dozen",
DriverId.MesaNvk => "NVK",
DriverId.ImaginationOpenSourceMesa => "Imagination (Open)",
- DriverId.MesaAgxv => "Honeykrisp",
+ DriverId.MesaHoneykrisp => "Honeykrisp",
_ => id.ToString(),
};
}
diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs
index ebbeb1398..6279ec3b4 100644
--- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs
+++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs
@@ -26,7 +26,17 @@ namespace Ryujinx.HLE.Loaders.Processes
private ulong _latestPid;
- public ProcessResult ActiveApplication => _processesByPid[_latestPid];
+ public ProcessResult ActiveApplication
+ {
+ get
+ {
+ if (!_processesByPid.TryGetValue(_latestPid, out ProcessResult value))
+ throw new RyujinxException(
+ $"The HLE Process map did not have a process with ID {_latestPid}. Are you missing firmware?");
+
+ return value;
+ }
+ }
public ProcessLoader(Switch device)
{
diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj
deleted file mode 100644
index 01efe04ba..000000000
--- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- true
- $(DefaultItemExcludes);._*
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs
index bc648ca02..1d56521e0 100644
--- a/src/Ryujinx/Program.cs
+++ b/src/Ryujinx/Program.cs
@@ -22,6 +22,7 @@ using Ryujinx.Headless;
using Ryujinx.SDL2.Common;
using Ryujinx.SDL3.Common;
using System;
+using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
@@ -247,16 +248,33 @@ namespace Ryujinx.Ava
: $"Launch Mode: {AppDataManager.Mode}");
}
- internal static void ProcessUnhandledException(object sender, Exception ex, bool isTerminating)
+ internal static void ProcessUnhandledException(object sender, Exception initialException, bool isTerminating)
{
Logger.Log log = Logger.Error ?? Logger.Notice;
- string message = $"Unhandled exception caught: {ex}";
- // ReSharper disable once ConstantConditionalAccessQualifier
- if (sender?.GetType()?.AsPrettyString() is { } senderName)
- log.Print(LogClass.Application, message, senderName);
+ List exceptions = [];
+
+ if (initialException is AggregateException ae)
+ {
+ exceptions.AddRange(ae.InnerExceptions);
+ }
else
- log.PrintMsg(LogClass.Application, message);
+ {
+ exceptions.Add(initialException);
+ }
+
+ foreach (var e in exceptions)
+ {
+ string message = $"Unhandled exception caught: {e}";
+ // ReSharper disable once ConstantConditionalAccessQualifier
+ if (sender?.GetType()?.AsPrettyString() is { } senderName)
+ log.Print(LogClass.Application, message, senderName);
+ else
+ log.PrintMsg(LogClass.Application, message);
+ }
+
+
+
if (isTerminating)
Exit();