diff --git a/src/core/arm/nce/visitor_base.h b/src/core/arm/nce/visitor_base.h
index 6a2be3d9bc21c8d7decf6999fcbbff07fa344d0e..c885ac47f45bd4f6a18407d9df728c787f76bcfb 100644
--- a/src/core/arm/nce/visitor_base.h
+++ b/src/core/arm/nce/visitor_base.h
@@ -11,6 +11,8 @@
 #include <dynarmic/frontend/A64/decoder/a64.h>
 #include <dynarmic/frontend/imm.h>
 
+#include "common/common_types.h"
+
 #pragma GCC diagnostic pop
 
 namespace Core {
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp
index d849ac43d70b1a61ebc39e71aca62763301474a8..e9896c7b6fe6936efb6cef40728196b8f7de5ab1 100644
--- a/src/core/crypto/key_manager.cpp
+++ b/src/core/crypto/key_manager.cpp
@@ -648,14 +648,14 @@ void KeyManager::ReloadKeys() {
 
     if (Settings::values.use_dev_keys) {
         dev_mode = true;
-        LoadFromFile(suyu_keys_dir / "dev.keys", 1);
+        LoadFromFile(suyu_keys_dir / "dev.keys", false);
     } else {
         dev_mode = false;
-        LoadFromFile(suyu_keys_dir / "prod.keys", 2);
+        LoadFromFile(suyu_keys_dir / "prod.keys", false);
     }
 
-    LoadFromFile(suyu_keys_dir / "title.keys", 3);
-    LoadFromFile(suyu_keys_dir / "console.keys", 4);
+    LoadFromFile(suyu_keys_dir / "title.keys", true);
+    LoadFromFile(suyu_keys_dir / "console.keys", false);
 }
 
 static bool ValidCryptoRevisionString(std::string_view base, size_t begin, size_t length) {
@@ -666,26 +666,11 @@ static bool ValidCryptoRevisionString(std::string_view base, size_t begin, size_
                        [](u8 c) { return std::isxdigit(c); });
 }
 
-void KeyManager::LoadFromFile(const std::filesystem::path& file_path, int key_type) {
+void KeyManager::LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys) {
     if (!Common::FS::Exists(file_path)) {
-        switch (key_type) {
-        case 1:
-            LOG_ERROR(Crypto, "Issue with Development key file at '{}': File not found",
-                      file_path.generic_string());
-            return;
-        case 2:
-            LOG_ERROR(Crypto, "Issue with Production key file at '{}': File not found",
-                      file_path.generic_string());
-            return;
-        case 3:
-            LOG_INFO(Crypto, "Issue with Title key file at '{}': File not found",
-                     file_path.generic_string());
-        case 4:
-            LOG_INFO(Crypto, "Issue with Console key file at '{}': File not found",
-                     file_path.generic_string());
-        default:
-            LOG_ERROR(Crypto, "Unknown Key Type");
-        }
+        LOG_ERROR(Crypto, "Cannot handle key file '{}': File not found",
+                  file_path.generic_string());
+        return;
     }
 
     std::ifstream file;
@@ -718,7 +703,7 @@ void KeyManager::LoadFromFile(const std::filesystem::path& file_path, int key_ty
             continue;
         }
 
-        if (key_type == 3) {
+        if (is_title_keys) {
             auto rights_id_raw = Common::HexStringToArray<16>(out[0]);
             u128 rights_id{};
             std::memcpy(rights_id.data(), rights_id_raw.data(), rights_id_raw.size());
@@ -818,8 +803,7 @@ bool KeyManager::BaseDeriveNecessary() const {
     }
 
     if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) {
-        LOG_ERROR(Crypto, "No title.keys found");
-        return true;
+        LOG_WARNING(Crypto, "Could not locate a title.keys file");
     }
 
     if (check_key_existence(S256KeyType::Header)) {
@@ -1322,4 +1306,4 @@ bool KeyManager::AddTicket(const Ticket& ticket) {
     SetKey(S128KeyType::Titlekey, key.value(), rights_id[1], rights_id[0]);
     return true;
 }
-} // namespace Core::Crypto
\ No newline at end of file
+} // namespace Core::Crypto
diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h
index 0d4cfe72af33e4e42ca0631e00e8d271a479222d..005062345ee651f5d841f0462b6cd973e3a670f1 100644
--- a/src/core/crypto/key_manager.h
+++ b/src/core/crypto/key_manager.h
@@ -312,7 +312,7 @@ private:
     RSAKeyPair<2048> eticket_rsa_keypair{};
 
     bool dev_mode;
-    void LoadFromFile(const std::filesystem::path& file_path, int key_type);
+    void LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys);
 
     void DeriveGeneralPurposeKeys(std::size_t crypto_revision);
 
diff --git a/src/suyu/main.cpp b/src/suyu/main.cpp
index 92615564d965667e75da08f81ff97f1615f3ced3..0d07c8d6d0b21a8fc5cdd95a709c1fe853d14569 100644
--- a/src/suyu/main.cpp
+++ b/src/suyu/main.cpp
@@ -1756,8 +1756,7 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa
         QMessageBox::warning(this, tr("Derivation Components Missing"),
                              tr("Encryption keys are missing. "
                                 "In order to use this emulator"
-                                "you need to provide your own prod.keys"
-                                "Some games might also require your own title.keys as well"
+                                "you need to provide your own encryption keys"
                                 "in order to play them."));
         return false;
     }
@@ -4631,9 +4630,9 @@ void GMainWindow::OnCheckFirmwareDecryption() {
     if (!ContentManager::AreKeysPresent()) {
         QMessageBox::warning(this, tr("Derivation Components Missing"),
                              tr("Encryption keys are missing. "
-                                "You need to provide both your own title.keys "
-                                "and your own prod.keys "
-                                "in order to play games"));
+                                "In order to use this emulator"
+                                "you need to provide your own encryption keys"
+                                "in order to play them."));
     }
 
     SetFirmwareVersion();
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index de28bf92ba3a3c2502435231afe89dfd92fa913d..36affdf4f0057399eed0d56cb3f8e4f221b7fab2 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -408,7 +408,7 @@ if (MSVC)
         /we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
     )
 else()
-    if (APPLE)
+    if (APPLE OR ARCHITECTURE_arm64)
         # error: declaration shadows a typedef in 'interval_base_set<SubType, DomainT, Compare, Interval, Alloc>'
         # error: implicit conversion loses integer precision: 'int' to 'boost::icl::bound_type' (aka 'unsigned char')
         target_compile_options(video_core PRIVATE -Wno-shadow -Wno-unused-local-typedef)
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp
index 5d2e684441dd0e237dac16a59620e194b900b1c7..fda4465a95d25fafe1b2d1159808ea8014d94154 100644
--- a/src/video_core/vulkan_common/vulkan_device.cpp
+++ b/src/video_core/vulkan_common/vulkan_device.cpp
@@ -1364,6 +1364,7 @@ void Device::CollectToolingInfo() {
         LOG_INFO(Render_Vulkan, "Attached debugging tool: {}", name);
         has_renderdoc = has_renderdoc || name == "RenderDoc";
         has_nsight_graphics = has_nsight_graphics || name == "NVIDIA Nsight Graphics";
+        has_radeon_gpu_profiler = has_radeon_gpu_profiler || name == "Radeon GPU Profiler";
     }
 }
 
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index 25c2a9f40609856fe27cb36566bebcf647dcf208..79f62b924147596aa44fb7cb59bc6fd8f0c03b8f 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -592,7 +592,7 @@ public:
 
     /// Returns true when a known debugging tool is attached.
     bool HasDebuggingToolAttached() const {
-        return has_renderdoc || has_nsight_graphics;
+        return has_renderdoc || has_nsight_graphics || has_radeon_gpu_profiler;
     }
 
     /// @returns True if compute pipelines can cause crashing.
@@ -821,6 +821,7 @@ private:
     bool has_broken_parallel_compiling{};      ///< Has broken parallel shader compiling.
     bool has_renderdoc{};                      ///< Has RenderDoc attached
     bool has_nsight_graphics{};                ///< Has Nsight Graphics attached
+    bool has_radeon_gpu_profiler{};            ///< Has Radeon GPU Profiler attached.
     bool supports_d24_depth{};                 ///< Supports D24 depth buffers.
     bool cant_blit_msaa{};                     ///< Does not support MSAA<->MSAA blitting.
     bool must_emulate_scaled_formats{};        ///< Requires scaled vertex format emulation