mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	core: Move ResultStatus outside of System
Allows it to be a forward declaration in other header files.
This commit is contained in:
		
							parent
							
								
									218ebc1fe8
								
							
						
					
					
						commit
						17763a44d5
					
				| @ -139,8 +139,8 @@ struct System::Impl { | ||||
|         : kernel{system}, fs_controller{system}, memory{system}, | ||||
|           cpu_manager{system}, reporter{system}, applet_manager{system}, time_manager{system} {} | ||||
| 
 | ||||
|     ResultStatus Run() { | ||||
|         status = ResultStatus::Success; | ||||
|     SystemResultStatus Run() { | ||||
|         status = SystemResultStatus::Success; | ||||
| 
 | ||||
|         kernel.Suspend(false); | ||||
|         core_timing.SyncPause(false); | ||||
| @ -149,8 +149,8 @@ struct System::Impl { | ||||
|         return status; | ||||
|     } | ||||
| 
 | ||||
|     ResultStatus Pause() { | ||||
|         status = ResultStatus::Success; | ||||
|     SystemResultStatus Pause() { | ||||
|         status = SystemResultStatus::Success; | ||||
| 
 | ||||
|         core_timing.SyncPause(true); | ||||
|         kernel.Suspend(true); | ||||
| @ -159,7 +159,7 @@ struct System::Impl { | ||||
|         return status; | ||||
|     } | ||||
| 
 | ||||
|     ResultStatus Init(System& system, Frontend::EmuWindow& emu_window) { | ||||
|     SystemResultStatus Init(System& system, Frontend::EmuWindow& emu_window) { | ||||
|         LOG_DEBUG(Core, "initialized OK"); | ||||
| 
 | ||||
|         device_memory = std::make_unique<Core::DeviceMemory>(); | ||||
| @ -197,7 +197,7 @@ struct System::Impl { | ||||
| 
 | ||||
|         gpu_core = VideoCore::CreateGPU(emu_window, system); | ||||
|         if (!gpu_core) { | ||||
|             return ResultStatus::ErrorVideoCore; | ||||
|             return SystemResultStatus::ErrorVideoCore; | ||||
|         } | ||||
| 
 | ||||
|         service_manager = std::make_shared<Service::SM::ServiceManager>(kernel); | ||||
| @ -217,21 +217,22 @@ struct System::Impl { | ||||
| 
 | ||||
|         LOG_DEBUG(Core, "Initialized OK"); | ||||
| 
 | ||||
|         return ResultStatus::Success; | ||||
|         return SystemResultStatus::Success; | ||||
|     } | ||||
| 
 | ||||
|     ResultStatus Load(System& system, Frontend::EmuWindow& emu_window, const std::string& filepath, | ||||
|                       u64 program_id, std::size_t program_index) { | ||||
|     SystemResultStatus Load(System& system, Frontend::EmuWindow& emu_window, | ||||
|                             const std::string& filepath, u64 program_id, | ||||
|                             std::size_t program_index) { | ||||
|         app_loader = Loader::GetLoader(system, GetGameFileFromPath(virtual_filesystem, filepath), | ||||
|                                        program_id, program_index); | ||||
| 
 | ||||
|         if (!app_loader) { | ||||
|             LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); | ||||
|             return ResultStatus::ErrorGetLoader; | ||||
|             return SystemResultStatus::ErrorGetLoader; | ||||
|         } | ||||
| 
 | ||||
|         ResultStatus init_result{Init(system, emu_window)}; | ||||
|         if (init_result != ResultStatus::Success) { | ||||
|         SystemResultStatus init_result{Init(system, emu_window)}; | ||||
|         if (init_result != SystemResultStatus::Success) { | ||||
|             LOG_CRITICAL(Core, "Failed to initialize system (Error {})!", | ||||
|                          static_cast<int>(init_result)); | ||||
|             Shutdown(); | ||||
| @ -249,8 +250,8 @@ struct System::Impl { | ||||
|             LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result); | ||||
|             Shutdown(); | ||||
| 
 | ||||
|             return static_cast<ResultStatus>(static_cast<u32>(ResultStatus::ErrorLoader) + | ||||
|                                              static_cast<u32>(load_result)); | ||||
|             return static_cast<SystemResultStatus>( | ||||
|                 static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result)); | ||||
|         } | ||||
|         AddGlueRegistrationForProcess(*app_loader, *main_process); | ||||
|         kernel.MakeCurrentProcess(main_process.get()); | ||||
| @ -282,7 +283,7 @@ struct System::Impl { | ||||
|         GetAndResetPerfStats(); | ||||
|         perf_stats->BeginSystemFrame(); | ||||
| 
 | ||||
|         status = ResultStatus::Success; | ||||
|         status = SystemResultStatus::Success; | ||||
|         return status; | ||||
|     } | ||||
| 
 | ||||
| @ -355,7 +356,7 @@ struct System::Impl { | ||||
|         arp_manager.Register(launch.title_id, launch, std::move(nacp_data)); | ||||
|     } | ||||
| 
 | ||||
|     void SetStatus(ResultStatus new_status, const char* details = nullptr) { | ||||
|     void SetStatus(SystemResultStatus new_status, const char* details = nullptr) { | ||||
|         status = new_status; | ||||
|         if (details) { | ||||
|             status_details = details; | ||||
| @ -411,7 +412,7 @@ struct System::Impl { | ||||
|     /// Network instance
 | ||||
|     Network::NetworkInstance network_instance; | ||||
| 
 | ||||
|     ResultStatus status = ResultStatus::Success; | ||||
|     SystemResultStatus status = SystemResultStatus::Success; | ||||
|     std::string status_details = ""; | ||||
| 
 | ||||
|     std::unique_ptr<Core::PerfStats> perf_stats; | ||||
| @ -439,16 +440,16 @@ const CpuManager& System::GetCpuManager() const { | ||||
|     return impl->cpu_manager; | ||||
| } | ||||
| 
 | ||||
| System::ResultStatus System::Run() { | ||||
| SystemResultStatus System::Run() { | ||||
|     return impl->Run(); | ||||
| } | ||||
| 
 | ||||
| System::ResultStatus System::Pause() { | ||||
| SystemResultStatus System::Pause() { | ||||
|     return impl->Pause(); | ||||
| } | ||||
| 
 | ||||
| System::ResultStatus System::SingleStep() { | ||||
|     return ResultStatus::Success; | ||||
| SystemResultStatus System::SingleStep() { | ||||
|     return SystemResultStatus::Success; | ||||
| } | ||||
| 
 | ||||
| void System::InvalidateCpuInstructionCaches() { | ||||
| @ -463,8 +464,8 @@ void System::Shutdown() { | ||||
|     impl->Shutdown(); | ||||
| } | ||||
| 
 | ||||
| System::ResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath, | ||||
|                                   u64 program_id, std::size_t program_index) { | ||||
| SystemResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath, | ||||
|                                 u64 program_id, std::size_t program_index) { | ||||
|     return impl->Load(*this, emu_window, filepath, program_id, program_index); | ||||
| } | ||||
| 
 | ||||
| @ -624,7 +625,7 @@ Loader::ResultStatus System::GetGameName(std::string& out) const { | ||||
|     return impl->GetGameName(out); | ||||
| } | ||||
| 
 | ||||
| void System::SetStatus(ResultStatus new_status, const char* details) { | ||||
| void System::SetStatus(SystemResultStatus new_status, const char* details) { | ||||
|     impl->SetStatus(new_status, details); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -104,6 +104,18 @@ struct PerfStatsResults; | ||||
| FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs, | ||||
|                                          const std::string& path); | ||||
| 
 | ||||
| /// Enumeration representing the return values of the System Initialize and Load process.
 | ||||
| enum class SystemResultStatus : u32 { | ||||
|     Success,             ///< Succeeded
 | ||||
|     ErrorNotInitialized, ///< Error trying to use core prior to initialization
 | ||||
|     ErrorGetLoader,      ///< Error finding the correct application loader
 | ||||
|     ErrorSystemFiles,    ///< Error in finding system files
 | ||||
|     ErrorSharedFont,     ///< Error in finding shared font
 | ||||
|     ErrorVideoCore,      ///< Error in the video core
 | ||||
|     ErrorUnknown,        ///< Any other error
 | ||||
|     ErrorLoader,         ///< The base for loader errors (too many to repeat)
 | ||||
| }; | ||||
| 
 | ||||
| class System { | ||||
| public: | ||||
|     using CurrentBuildProcessID = std::array<u8, 0x20>; | ||||
| @ -118,35 +130,23 @@ public: | ||||
|     System(System&&) = delete; | ||||
|     System& operator=(System&&) = delete; | ||||
| 
 | ||||
|     /// Enumeration representing the return values of the System Initialize and Load process.
 | ||||
|     enum class ResultStatus : u32 { | ||||
|         Success,             ///< Succeeded
 | ||||
|         ErrorNotInitialized, ///< Error trying to use core prior to initialization
 | ||||
|         ErrorGetLoader,      ///< Error finding the correct application loader
 | ||||
|         ErrorSystemFiles,    ///< Error in finding system files
 | ||||
|         ErrorSharedFont,     ///< Error in finding shared font
 | ||||
|         ErrorVideoCore,      ///< Error in the video core
 | ||||
|         ErrorUnknown,        ///< Any other error
 | ||||
|         ErrorLoader,         ///< The base for loader errors (too many to repeat)
 | ||||
|     }; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Run the OS and Application | ||||
|      * This function will start emulation and run the relevant devices | ||||
|      */ | ||||
|     [[nodiscard]] ResultStatus Run(); | ||||
|     [[nodiscard]] SystemResultStatus Run(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Pause the OS and Application | ||||
|      * This function will pause emulation and stop the relevant devices | ||||
|      */ | ||||
|     [[nodiscard]] ResultStatus Pause(); | ||||
|     [[nodiscard]] SystemResultStatus Pause(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Step the CPU one instruction | ||||
|      * @return Result status, indicating whether or not the operation succeeded. | ||||
|      */ | ||||
|     [[nodiscard]] ResultStatus SingleStep(); | ||||
|     [[nodiscard]] SystemResultStatus SingleStep(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Invalidate the CPU instruction caches | ||||
| @ -166,10 +166,11 @@ public: | ||||
|      *                   input. | ||||
|      * @param filepath String path to the executable application to load on the host file system. | ||||
|      * @param program_index Specifies the index within the container of the program to launch. | ||||
|      * @returns ResultStatus code, indicating if the operation succeeded. | ||||
|      * @returns SystemResultStatus code, indicating if the operation succeeded. | ||||
|      */ | ||||
|     [[nodiscard]] ResultStatus Load(Frontend::EmuWindow& emu_window, const std::string& filepath, | ||||
|                                     u64 program_id = 0, std::size_t program_index = 0); | ||||
|     [[nodiscard]] SystemResultStatus Load(Frontend::EmuWindow& emu_window, | ||||
|                                           const std::string& filepath, u64 program_id = 0, | ||||
|                                           std::size_t program_index = 0); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Indicates if the emulated system is powered on (all subsystems initialized and able to run an | ||||
| @ -295,7 +296,7 @@ public: | ||||
|     /// Gets the name of the current game
 | ||||
|     [[nodiscard]] Loader::ResultStatus GetGameName(std::string& out) const; | ||||
| 
 | ||||
|     void SetStatus(ResultStatus new_status, const char* details); | ||||
|     void SetStatus(SystemResultStatus new_status, const char* details); | ||||
| 
 | ||||
|     [[nodiscard]] const std::string& GetStatusDetails() const; | ||||
| 
 | ||||
|  | ||||
| @ -86,15 +86,15 @@ void EmuThread::run() { | ||||
|             } | ||||
| 
 | ||||
|             running_guard = true; | ||||
|             Core::System::ResultStatus result = system.Run(); | ||||
|             if (result != Core::System::ResultStatus::Success) { | ||||
|             Core::SystemResultStatus result = system.Run(); | ||||
|             if (result != Core::SystemResultStatus::Success) { | ||||
|                 running_guard = false; | ||||
|                 this->SetRunning(false); | ||||
|                 emit ErrorThrown(result, system.GetStatusDetails()); | ||||
|             } | ||||
|             running_wait.Wait(); | ||||
|             result = system.Pause(); | ||||
|             if (result != Core::System::ResultStatus::Success) { | ||||
|             if (result != Core::SystemResultStatus::Success) { | ||||
|                 running_guard = false; | ||||
|                 this->SetRunning(false); | ||||
|                 emit ErrorThrown(result, system.GetStatusDetails()); | ||||
|  | ||||
| @ -123,7 +123,7 @@ signals: | ||||
|      */ | ||||
|     void DebugModeLeft(); | ||||
| 
 | ||||
|     void ErrorThrown(Core::System::ResultStatus, std::string); | ||||
|     void ErrorThrown(Core::SystemResultStatus, std::string); | ||||
| 
 | ||||
|     void LoadProgress(VideoCore::LoadCallbackStage stage, std::size_t value, std::size_t total); | ||||
| }; | ||||
|  | ||||
| @ -406,7 +406,7 @@ void GMainWindow::RegisterMetaTypes() { | ||||
|     qRegisterMetaType<Service::AM::Applets::WebExitReason>("Service::AM::Applets::WebExitReason"); | ||||
| 
 | ||||
|     // Register loader types
 | ||||
|     qRegisterMetaType<Core::System::ResultStatus>("Core::System::ResultStatus"); | ||||
|     qRegisterMetaType<Core::SystemResultStatus>("Core::SystemResultStatus"); | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::ControllerSelectorReconfigureControllers( | ||||
| @ -1252,13 +1252,13 @@ bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t p | ||||
|         std::make_unique<QtWebBrowser>(*this),         // Web Browser
 | ||||
|     }); | ||||
| 
 | ||||
|     const Core::System::ResultStatus result{ | ||||
|     const Core::SystemResultStatus result{ | ||||
|         system.Load(*render_window, filename.toStdString(), program_id, program_index)}; | ||||
| 
 | ||||
|     const auto drd_callout = (UISettings::values.callout_flags.GetValue() & | ||||
|                               static_cast<u32>(CalloutFlag::DRDDeprecation)) == 0; | ||||
| 
 | ||||
|     if (result == Core::System::ResultStatus::Success && | ||||
|     if (result == Core::SystemResultStatus::Success && | ||||
|         system.GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory && | ||||
|         drd_callout) { | ||||
|         UISettings::values.callout_flags = UISettings::values.callout_flags.GetValue() | | ||||
| @ -1273,14 +1273,14 @@ bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t p | ||||
|                "wiki</a>. This message will not be shown again.")); | ||||
|     } | ||||
| 
 | ||||
|     if (result != Core::System::ResultStatus::Success) { | ||||
|     if (result != Core::SystemResultStatus::Success) { | ||||
|         switch (result) { | ||||
|         case Core::System::ResultStatus::ErrorGetLoader: | ||||
|         case Core::SystemResultStatus::ErrorGetLoader: | ||||
|             LOG_CRITICAL(Frontend, "Failed to obtain loader for {}!", filename.toStdString()); | ||||
|             QMessageBox::critical(this, tr("Error while loading ROM!"), | ||||
|                                   tr("The ROM format is not supported.")); | ||||
|             break; | ||||
|         case Core::System::ResultStatus::ErrorVideoCore: | ||||
|         case Core::SystemResultStatus::ErrorVideoCore: | ||||
|             QMessageBox::critical( | ||||
|                 this, tr("An error occurred initializing the video core."), | ||||
|                 tr("yuzu has encountered an error while running the video core, please see the " | ||||
| @ -1294,8 +1294,8 @@ bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t p | ||||
|             break; | ||||
| 
 | ||||
|         default: | ||||
|             if (result > Core::System::ResultStatus::ErrorLoader) { | ||||
|                 const u16 loader_id = static_cast<u16>(Core::System::ResultStatus::ErrorLoader); | ||||
|             if (result > Core::SystemResultStatus::ErrorLoader) { | ||||
|                 const u16 loader_id = static_cast<u16>(Core::SystemResultStatus::ErrorLoader); | ||||
|                 const u16 error_id = static_cast<u16>(result) - loader_id; | ||||
|                 const std::string error_code = fmt::format("({:04X}-{:04X})", loader_id, error_id); | ||||
|                 LOG_CRITICAL(Frontend, "Failed to load ROM! {}", error_code); | ||||
| @ -3052,7 +3052,7 @@ void GMainWindow::OnMouseActivity() { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::OnCoreError(Core::System::ResultStatus result, std::string details) { | ||||
| void GMainWindow::OnCoreError(Core::SystemResultStatus result, std::string details) { | ||||
|     QMessageBox::StandardButton answer; | ||||
|     QString status_message; | ||||
|     const QString common_message = | ||||
| @ -3067,7 +3067,7 @@ void GMainWindow::OnCoreError(Core::System::ResultStatus result, std::string det | ||||
|            "back to the game list? Continuing emulation may result in crashes, corrupted save " | ||||
|            "data, or other bugs."); | ||||
|     switch (result) { | ||||
|     case Core::System::ResultStatus::ErrorSystemFiles: { | ||||
|     case Core::SystemResultStatus::ErrorSystemFiles: { | ||||
|         QString message; | ||||
|         if (details.empty()) { | ||||
|             message = | ||||
| @ -3083,7 +3083,7 @@ void GMainWindow::OnCoreError(Core::System::ResultStatus result, std::string det | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     case Core::System::ResultStatus::ErrorSharedFont: { | ||||
|     case Core::SystemResultStatus::ErrorSharedFont: { | ||||
|         const QString message = | ||||
|             tr("yuzu was unable to locate the Switch shared fonts. %1").arg(common_message); | ||||
|         answer = QMessageBox::question(this, tr("Shared Fonts Not Found"), message, | ||||
|  | ||||
| @ -280,7 +280,7 @@ private slots: | ||||
|     void ResetWindowSize900(); | ||||
|     void ResetWindowSize1080(); | ||||
|     void OnCaptureScreenshot(); | ||||
|     void OnCoreError(Core::System::ResultStatus, std::string); | ||||
|     void OnCoreError(Core::SystemResultStatus, std::string); | ||||
|     void OnReinitializeKeys(ReinitializeKeyBehavior behavior); | ||||
|     void OnLanguageChanged(const QString& locale); | ||||
|     void OnMouseActivity(); | ||||
|  | ||||
| @ -166,27 +166,27 @@ int main(int argc, char** argv) { | ||||
|     system.SetFilesystem(std::make_shared<FileSys::RealVfsFilesystem>()); | ||||
|     system.GetFileSystemController().CreateFactories(*system.GetFilesystem()); | ||||
| 
 | ||||
|     const Core::System::ResultStatus load_result{system.Load(*emu_window, filepath)}; | ||||
|     const Core::SystemResultStatus load_result{system.Load(*emu_window, filepath)}; | ||||
| 
 | ||||
|     switch (load_result) { | ||||
|     case Core::System::ResultStatus::ErrorGetLoader: | ||||
|     case Core::SystemResultStatus::ErrorGetLoader: | ||||
|         LOG_CRITICAL(Frontend, "Failed to obtain loader for {}!", filepath); | ||||
|         return -1; | ||||
|     case Core::System::ResultStatus::ErrorLoader: | ||||
|     case Core::SystemResultStatus::ErrorLoader: | ||||
|         LOG_CRITICAL(Frontend, "Failed to load ROM!"); | ||||
|         return -1; | ||||
|     case Core::System::ResultStatus::ErrorNotInitialized: | ||||
|     case Core::SystemResultStatus::ErrorNotInitialized: | ||||
|         LOG_CRITICAL(Frontend, "CPUCore not initialized"); | ||||
|         return -1; | ||||
|     case Core::System::ResultStatus::ErrorVideoCore: | ||||
|     case Core::SystemResultStatus::ErrorVideoCore: | ||||
|         LOG_CRITICAL(Frontend, "Failed to initialize VideoCore!"); | ||||
|         return -1; | ||||
|     case Core::System::ResultStatus::Success: | ||||
|     case Core::SystemResultStatus::Success: | ||||
|         break; // Expected case
 | ||||
|     default: | ||||
|         if (static_cast<u32>(load_result) > | ||||
|             static_cast<u32>(Core::System::ResultStatus::ErrorLoader)) { | ||||
|             const u16 loader_id = static_cast<u16>(Core::System::ResultStatus::ErrorLoader); | ||||
|             static_cast<u32>(Core::SystemResultStatus::ErrorLoader)) { | ||||
|             const u16 loader_id = static_cast<u16>(Core::SystemResultStatus::ErrorLoader); | ||||
|             const u16 error_id = static_cast<u16>(load_result) - loader_id; | ||||
|             LOG_CRITICAL(Frontend, | ||||
|                          "While attempting to load the ROM requested, an error occurred. Please " | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user