summaryrefslogtreecommitdiffstats
path: root/src/core/core.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* VideoCore: Refactor syncing.Fernando Sahmkow2022-10-061-0/+12
|
* Remove pause callbacks from coretimingKelebek12022-09-131-4/+0
|
* yuzu: Display current game version in multiplayer roomFearlessTobi2022-08-271-0/+9
| | | | Makes it easier for users to recognize connection errors caused by different game versions.
* chore: make yuzu REUSE compliantAndrea Pappacoda2022-07-271-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [REUSE] is a specification that aims at making file copyright information consistent, so that it can be both human and machine readable. It basically requires that all files have a header containing copyright and licensing information. When this isn't possible, like when dealing with binary assets, generated files or embedded third-party dependencies, it is permitted to insert copyright information in the `.reuse/dep5` file. Oh, and it also requires that all the licenses used in the project are present in the `LICENSES` folder, that's why the diff is so huge. This can be done automatically with `reuse download --all`. The `reuse` tool also contains a handy subcommand that analyzes the project and tells whether or not the project is (still) compliant, `reuse lint`. Following REUSE has a few advantages over the current approach: - Copyright information is easy to access for users / downstream - Files like `dist/license.md` do not need to exist anymore, as `.reuse/dep5` is used instead - `reuse lint` makes it easy to ensure that copyright information of files like binary assets / images is always accurate and up to date To add copyright information of files that didn't have it I looked up who committed what and when, for each file. As yuzu contributors do not have to sign a CLA or similar I couldn't assume that copyright ownership was of the "yuzu Emulator Project", so I used the name and/or email of the commit author instead. [REUSE]: https://reuse.software Follow-up to 01cf05bc75b1e47beb08937439f3ed9339e7b254
* network: Move global state into a seperate classFearlessTobi2022-07-251-3/+13
| | | | Co-Authored-By: Narr the Reg <5944268+german77@users.noreply.github.com>
* core: Fix -Wunused-variableFearlessTobi2022-07-251-1/+3
|
* yuzu: Add ui files for multiplayer roomsFearlessTobi2022-07-251-1/+16
|
* Project AndioKelebek12022-07-221-3/+48
|
* kernel: implement KProcess suspensionLiam2022-06-141-10/+8
|
* core/debugger: fix a number of shutdown deadlocksLiam2022-06-101-0/+6
|
* core/debugger: Implement new GDB stub debuggerLiam2022-06-011-4/+25
|
* Remove unused PrepareReschedule functionMerry2022-04-241-4/+0
|
* core: Reduce unused includesameerj2022-03-191-1/+0
|
* core: Don't shutdown a null GPUlat9nq2022-03-071-1/+3
| | | | | | | When CreateGPU fails, yuzu would try and shutdown the GPU instance regardless of whether any instance was actually created. Check for nullptr before calling its methods to prevent a crash.
* core: hle: kernel: KProcess: Pass in KResourceLimit on process creation.bunnei2022-02-211-1/+10
| | | | - This allows us to have a resource limit per process, rather than use the global system resource limit.
* gpu: Add shut down method to synchronize threads before destructionameerj2022-01-041-0/+2
|
* core: hle: kernel: Reflect non-emulated threads as core 3.bunnei2021-12-071-6/+0
|
* core: Register HIDgerman772021-11-251-3/+11
|
* Merge pull request #7279 from Morph1984/system-get-program-idMorph2021-11-051-1/+5
|\ | | | | general: Get the current process program id directly from the system
| * general: Get the current process program id directly from the systemMorph2021-11-041-0/+4
| | | | | | | | This allows us to avoid including KProcess' header file in files that only need to get the current process' program id.
| * general: Rename GetTitleID to GetProgramIDMorph2021-11-041-1/+1
| |
* | core: Reorder perf_stats destruction order on Shutdownameerj2021-11-051-1/+1
|/ | | | Avoids the gpu_core using perf_stats after it's been freed.
* core: Remove unused includesameerj2021-11-041-4/+0
|
* Revert PR7009Feng Chen2021-10-271-13/+3
|
* settings: Remove std::chrono usageameerj2021-10-171-2/+3
| | | | Alleviates the dependency on chrono for all files that include settings.h
* NvHost/Core: Address Feedback.Fernando Sahmkow2021-10-161-15/+19
|
* Suspend temporallyFernandoS272021-10-161-0/+27
|
* core: Move ResultStatus outside of SystemMorph2021-10-151-24/+25
| | | | Allows it to be a forward declaration in other header files.
* core: Remove static system instanceMorph2021-10-151-14/+1
|
* core: Add Exit and ExitCallbackMorph2021-10-021-0/+13
| | | | This allows ISelfController::Exit to stop the currently running application. This is typically used by homebrew to exit back to the homebrew menu after calling consoleExit with libnx.
* video_core: Fix jthread related hangs when stopping emulationameerj2021-09-241-1/+1
| | | | jthread on some compilers is more picky when it comes to the order in which objects are destroyed.
* gpu: Use std::jthread for async gpu threadameerj2021-09-161-5/+1
|
* core: Destroy main_process during shutdownameerj2021-09-141-3/+12
| | | | The main_process was never being cleaned up, causing a noticeable memory leak after subsequent launches. This change cleans up the memory during Core Shutdown, mitigating the leak.
* Revert "kernel: Various improvements to scheduler"bunnei2021-08-261-0/+6
|
* logging: Fix log filter during initializationameerj2021-08-241-1/+9
| | | | | | The log filter was being ignored on initialization due to the logging instance being initialized before the config instance, so the log filter was set to its default value. This fixes that oversight, along with using descriptive exceptions instead of abort() calls.
* Merge pull request #6869 from yzct12345/shiny-logs-in-the-fireplacebunnei2021-08-231-2/+7
|\ | | | | logging: Simplify and make thread-safe
| * logging: Simplify and make thread-safeyzct123452021-08-131-2/+7
| | | | | | | | | | | | | | | | | | This simplifies the logging system. This also fixes some lost messages on startup. The simplification is simple. I removed unused functions and moved most things in the .h to the .cpp. I replaced the unnecessary linked list with its contents laid out as three member variables. Anything that went through the linked list now directly accesses the backends. Generic functions are replaced with those for each specific use case and there aren't many. This change increases coupling but we gain back more KISS and encapsulation. With those changes it was easy to make it thread-safe. I just removed the mutex and turned a boolean atomic. I was planning to use this thread-safety in my next PR about stacktraces. It was actually async-signal-safety at first but I ended up using a different approach. Anyway getting rid of the linked list is important for that because have the list of backends constantly changing complicates things.
* | core: hle: kernel: Reflect non-emulated threads as core 3.bunnei2021-08-071-6/+0
|/
* general: Rename "Frame Limit" references to "Speed Limit"ameerj2021-07-241-5/+5
| | | | | This setting is best referred to as a speed limit, as it involves the limits of all timing based aspects of the emulator, not only framerate. This allows us to differentiate it from the fps unlocker setting.
* file_sys: Support load game collection (#6582)Feng Chen2021-07-201-7/+6
| | | Adds support for loading games with multiple programs embedded within such as the Dragon Quest 1+2+3 Collection
* service: Append service name prefix to common filenamesMorph2021-07-141-2/+2
|
* general: Code formatting improvementslat9nq2021-07-081-2/+2
| | | | | | | | | | | | Slight improvements to readability. Dropped suggestions for string_view (settings.h:101), pass by value (settings.h:82), reverting double to a float (config.cpp:316), and other smaller ones, some out of scope. Addresses review feedback. Co-authored-by: Ameer J <52414509+ameerj@users.noreply.github.com>
* general: Make most settings a BasicSettinglat9nq2021-06-281-3/+3
| | | | | | | | | | | Creates a new BasicSettings class in common/settings, and forces setting a default and label for each setting that uses it in common/settings. Moves defaults and labels from both frontends into common settings. Creates a helper function in each frontend to facillitate reading the settings now with the new default and label properties. Settings::Setting is also now a subclass of Settings::BasicSetting. Also adds documentation for both Setting and BasicSetting.
* core: Make is_powered_on atomicRodrigo Locatti2021-06-221-2/+3
| | | | Fixes potential data races when shutting down.
* common: fs: Rework the Common Filesystem interface to make use of std::filesystem (#6270)Morph2021-05-261-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * common: fs: fs_types: Create filesystem types Contains various filesystem types used by the Common::FS library * common: fs: fs_util: Add std::string to std::u8string conversion utility * common: fs: path_util: Add utlity functions for paths Contains various utility functions for getting or manipulating filesystem paths used by the Common::FS library * common: fs: file: Rewrite the IOFile implementation * common: fs: Reimplement Common::FS library using std::filesystem * common: fs: fs_paths: Add fs_paths to replace common_paths * common: fs: path_util: Add the rest of the path functions * common: Remove the previous Common::FS implementation * general: Remove unused fs includes * string_util: Remove unused function and include * nvidia_flags: Migrate to the new Common::FS library * settings: Migrate to the new Common::FS library * logging: backend: Migrate to the new Common::FS library * core: Migrate to the new Common::FS library * perf_stats: Migrate to the new Common::FS library * reporter: Migrate to the new Common::FS library * telemetry_session: Migrate to the new Common::FS library * key_manager: Migrate to the new Common::FS library * bis_factory: Migrate to the new Common::FS library * registered_cache: Migrate to the new Common::FS library * xts_archive: Migrate to the new Common::FS library * service: acc: Migrate to the new Common::FS library * applets/profile: Migrate to the new Common::FS library * applets/web: Migrate to the new Common::FS library * service: filesystem: Migrate to the new Common::FS library * loader: Migrate to the new Common::FS library * gl_shader_disk_cache: Migrate to the new Common::FS library * nsight_aftermath_tracker: Migrate to the new Common::FS library * vulkan_library: Migrate to the new Common::FS library * configure_debug: Migrate to the new Common::FS library * game_list_worker: Migrate to the new Common::FS library * config: Migrate to the new Common::FS library * configure_filesystem: Migrate to the new Common::FS library * configure_per_game_addons: Migrate to the new Common::FS library * configure_profile_manager: Migrate to the new Common::FS library * configure_ui: Migrate to the new Common::FS library * input_profiles: Migrate to the new Common::FS library * yuzu_cmd: config: Migrate to the new Common::FS library * yuzu_cmd: Migrate to the new Common::FS library * vfs_real: Migrate to the new Common::FS library * vfs: Migrate to the new Common::FS library * vfs_libzip: Migrate to the new Common::FS library * service: bcat: Migrate to the new Common::FS library * yuzu: main: Migrate to the new Common::FS library * vfs_real: Delete the contents of an existing file in CreateFile Current usages of CreateFile expect to delete the contents of an existing file, retain this behavior for now. * input_profiles: Don't iterate the input profile dir if it does not exist Silences an error produced in the log if the directory does not exist. * game_list_worker: Skip parsing file if the returned VfsFile is nullptr Prevents crashes in GetLoader when the virtual file is nullptr * common: fs: Validate paths for path length * service: filesystem: Open the mod load directory as read only
* Merge pull request #6321 from lat9nq/per-game-cpubunnei2021-05-211-1/+1
|\ | | | | configuration: Add CPU tab to game properties and slight per-game settings rework
| * general: Demote custom_rtc to regular settinglat9nq2021-05-171-1/+1
| |
* | perf_stats: Rework FPS counter to be more accurateameerj2021-05-161-1/+2
|/ | | | | | | | | The FPS counter was based on metrics in the nvdisp swapbuffers call. This metric would be accurate if the gpu thread/renderer were synchronous with the nvdisp service, but that's no longer the case. This commit moves the frame counting responsibility onto the concrete renderers after their frame draw calls. Resulting in more meaningful metrics. The displayed FPS is now made up of the average framerate between the previous and most recent update, in order to avoid distracting FPS counter updates when framerate is oscillating between close values. The status bar update frequency was also changed from 2 seconds to 500ms.
* hle: kernel: Rename Process to KProcess.bunnei2021-05-061-7/+7
|
* hle: kernel: Migrate KClientPort to KAutoObject.bunnei2021-05-061-1/+1
|
* hle: kernel: Refactor several threads/events/sharedmemory to use slab heaps.bunnei2021-05-061-1/+1
|
* hle: kernel: Migrate KProcess to KAutoObject.bunnei2021-05-061-3/+6
|
* core: Defer CoreTiming initialization.bunnei2021-05-061-1/+1
|
* core: memory: Add a work-around to allocate and access kernel memory regions by vaddr.bunnei2021-05-061-0/+1
|
* common: Move settings to common from core.bunnei2021-04-151-1/+10
| | | | - Removes a dependency on core and input_common from common.
* video_core/gpu_thread: Implement a ShutDown method.Markus Wick2021-04-071-1/+1
| | | | | | This was implicitly done by `is_powered_on = false`, however the explicit method allows us to block until the GPU is actually gone. This should fix a race condition while removing the other subsystems while the GPU is still active.
* core: Shutdown: Move kernel cleanup to later in shutdown.bunnei2021-03-021-12/+1
| | | | - Fixes a shutdown crash due to a race condition with GPU still accessing memory.
* kernel: Fix resource release exception on exitameerj2021-02-211-0/+3
| | | | | After rewriting the resource limit, objects releasing reserved resources require a live kernel instance. This commit fixes exceptions that occur due to the kernel being destroyed before some objects released their resources, allowing for a graceful exit.
* core: hle: kernel: Rename Thread to KThread.bunnei2021-01-291-1/+1
|
* lm: Recode LM serviceChloe Marcec2021-01-201-12/+0
| | | | Rework the service to spit out to logs instead of a seperate file as well as fix any crashes caused by lm.
* core: Do not reset device_memory on shutdown.bunnei2020-12-291-1/+0
| | | | - This will be reset on initialization.
* core: settings: Untangle multicore from asynchronous GPU.bunnei2020-12-291-1/+1
| | | | - Now that GPU is always threaded, we can support multicore with synchronous GPU.
* Merge pull request #5131 from bunnei/scheduler-rewritebunnei2020-12-211-21/+5
|\ | | | | Rewrite Kernel scheduler based on Atmosphere
| * hle: kernel: Rewrite scheduler implementation based on Mesopshere.bunnei2020-12-061-21/+5
| |
* | core: Remove unnecessary enum casts in log callsLioncash2020-12-081-3/+2
|/ | | | | Follows the video core PR. fmt doesn't require casts for enum classes anymore, so we can remove quite a few casts.
* core: arm: Implement InvalidateCacheRange for CPU cache invalidation.bunnei2020-11-291-0/+4
|
* hle: kernel: multicore: Replace n-JITs impl. with 4 JITs.bunnei2020-11-291-8/+5
|
* Merge pull request #5011 from lioncash/file-str2bunnei2020-11-281-12/+22
|\ | | | | core: Reduce string copies in GetGameFileFromPath()
| * core: Reduce string copies in GetGameFileFromPath()Lioncash2020-11-261-12/+22
| | | | | | | | | | Eliminates some minor string churn where applicable. Also eliminates an unnecessary vector copy.
* | core: Eliminate remaining usages of the global system instanceLioncash2020-11-271-6/+1
|/ | | | | | Removes all remaining usages of the global system instance. After this, migration can begin to migrate to being constructed and managed entirely by the various frontends.
* core: loader: Implement support for loading indexed programs.bunnei2020-11-251-6/+23
|
* hle: services: Fix a crash with improper NVFlinger lifetime management. (#4977)bunnei2020-11-241-3/+6
| | | | | | * hle: services: Fix a crash with improper NVFlinger lifetime management. - This crash would happen when attempting to shutdown yuzu early on in boot.
* Merge pull request #4942 from lioncash/systemRodrigo Locatti2020-11-241-9/+9
|\ | | | | core: Make use of [[nodiscard]] with the System class
| * core: Remove unused private Init function for the System classLioncash2020-11-181-8/+4
| | | | | | | | This isn't used, so it can be removed.
| * core: Make use of [[nodiscard]] with the System classLioncash2020-11-181-1/+5
| | | | | | | | | | Given this is a central class, we should flag cases where the return value of some functions not being used is likely a bug.
* | patch_manager: Remove usages of the global system instanceLioncash2020-11-181-3/+3
|/ | | | | | | With this, only 19 usages of the global system instance remain within the core library. We're almost there.
* core: Initialize GPU before services.bunnei2020-11-011-4/+6
|
* service: time: Update current time with changes to RTC setting.bunnei2020-10-131-1/+14
| | | | - This can be used to advance time, e.g. for Pokemon Sword/Shield pokejobs.
* service/sm: Eliminate dependency on the global system instanceLioncash2020-09-171-1/+1
|
* file_sys/bis_factory: Eliminate usage of the global system accessorLioncash2020-09-171-2/+2
|
* core/loader: Remove dependencies on the global system instanceLioncash2020-09-161-1/+1
| | | | | | | | | Now all that remains is: 18 instances in file_sys code 14 instances in GDB stub code (this can be tossed wholesale) 4 instances in HLE code 2 instances in settings code.
* video_core: Remove all Core::System references in rendererReinUsesLisp2020-09-061-1/+0
| | | | | | | | | Now that the GPU is initialized when video backends are initialized, it's no longer needed to query components once the game is running: it can be done when yuzu is booting. This allows us to pass components between constructors and in the process remove all Core::System references in the video backend.
* common/telemetry: Migrate namespace into the Common namespaceLioncash2020-08-181-6/+6
| | | | | Migrates the Telemetry namespace into the Common namespace to make the code consistent with the rest of our common code.
* common/fileutil: Convert namespace to Common::FSLioncash2020-08-161-1/+1
| | | | | | | | | | | | Migrates a remaining common file over to the Common namespace, making it consistent with the rest of common files. This also allows for high-traffic FS related code to alias the filesystem function namespace as namespace FS = Common::FS; for more concise typing.
* device_memory: Remove unused system memberLioncash2020-07-281-1/+1
| | | | This isn't used by anything in particular, so it can be removed.
* core/network: Add network abstractionReinUsesLisp2020-07-191-0/+4
| | | | | | | | | | This commit adds a network abstraction designed to implement bsd:s but at the same time work as a generic abstraction to implement any networking code we have to use from core. This is implemented on top of BSD sockets on Unix systems and winsock on Windows. The code is designed around winsocks having compatibility definitions to support both BSD and Windows sockets.
* configuration: implement per-game configurations (#4098)lat9nq2020-07-101-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Switch game settings to use a pointer In order to add full per-game settings, we need to be able to tell yuzu to switch to using either the global or game configuration. Using a pointer makes it easier to switch. * configuration: add new UI without changing existing funcitonality The new UI also adds General, System, Graphics, Advanced Graphics, and Audio tabs, but as yet they do nothing. This commit keeps yuzu to the same functionality as originally branched. * configuration: Rename files These weren't included in the last commit. Now they are. * configuration: setup global configuration checkbox Global config checkbox now enables/disables the appropriate tabs in the game properties dialog. The use global configuration setting is now saved to the config, defaulting to true. This also addresses some changes requested in the PR. * configuration: swap to per-game config memory for properties dialog Does not set memory going in-game. Swaps to game values when opening the properties dialog, then swaps back when closing it. Uses a `memcpy` to swap. Also implements saving config files, limited to certain groups of configurations so as to not risk setting unsafe configurations. * configuration: change config interfaces to use config-specific pointers When a game is booted, we need to be able to open the configuration dialogs without changing the settings pointer in the game's emualtion. A new pointer specific to just the configuration dialogs can be used to separate changes to just those config dialogs without affecting the emulation. * configuration: boot a game using per-game settings Swaps values where needed to boot a game. * configuration: user correct config during emulation Creates a new pointer specifically for modifying the configuration while emulation is in progress. Both the regular configuration dialog and the game properties dialog now use the pointer Settings::config_values to focus edits to the correct struct. * settings: split Settings::values into two different structs By splitting the settings into two mutually exclusive structs, it becomes easier, as a developer, to determine how to use the Settings structs after per-game configurations is merged. Other benefits include only duplicating the required settings in memory. * settings: move use_docked_mode to Controls group `use_docked_mode` is set in the input settings and cannot be accessed from the system settings. Grouping it with system settings causes it to be saved with per-game settings, which may make transferring configs more difficult later on, especially since docked mode cannot be set from within the game properties dialog. * configuration: Fix the other yuzu executables and a regression In main.cpp, we have to get the title ID before the ROM is loaded, else the renderer will reflect only the global settings and now the user's game specific settings. * settings: use a template to duplicate memory for each setting Replaces the type of each variable in the Settings::Values struct with a new class that allows basic data reading and writing. The new struct Settings::Setting duplicates the data in memory and can manage global overrides per each setting. * configuration: correct add-ons config and swap settings when apropriate Any add-ons interaction happens directly through the global values struct. Swapping bewteen structs now also includes copying the necessary global configs that cannot be changed nor saved in per-game settings. General and System config menus now update based on whether it is viewing the global or per-game settings. * settings: restore old values struct No longer needed with the Settings::Setting class template. * configuration: implement hierarchical game properties dialog This sets the apropriate global or local data in each setting. * clang format * clang format take 2 can the docker container save this? * address comments and style issues * config: read and write settings with global awareness Adds new functions to read and write settings while keeping the global state in focus. Files now generated per-game are much smaller since often they only need address the global state. * settings: restore global state when necessary Upon closing a game or the game properties dialog, we need to restore all global settings to the original global state so that we can properly open the configuration dialog or boot a different game. * configuration: guard setting values incorrectly This disables setting values while a game is running if the setting is overwritten by a per game setting. * config: don't write local settings in the global config Simple guards to prevent writing the wrong settings in the wrong files. * configuration: add comments, assume less, and clang format No longer assumes that a disabled UI element means the global state is turned off, instead opting to directly answer that question. Still however assumes a game is running if it is in that state. * configuration: fix a logic error Should not be negated * restore settings' global state regardless of accept/cancel Fixes loading a properties dialog and causing the global config dialog to show local settings. * fix more logic errors Fixed the frame limit would set the global setting from the game properties dialog. Also strengthened the Settings::Setting member variables and simplified the logic in config reading (ReadSettingGlobal). * fix another logic error In my efforts to guard RestoreGlobalState, I accidentally negated the IsPowered condition. * configure_audio: set toggle_stretched_audio to tristate * fixed custom rtc and rng seed overwriting the global value * clang format * rebased * clang format take 4 * address my own review Basically revert unintended changes * settings: literal instead of casting "No need to cast, use 1U instead" Thanks, Morph! Co-authored-by: Morph <39850852+Morph1984@users.noreply.github.com> * Revert "settings: literal instead of casting " This reverts commit 95e992a87c898f3e882ffdb415bb0ef9f80f613f. * main: fix status buttons reporting wrong settings after stop emulation * settings: Log UseDockedMode in the Controls group This should have happened when use_docked_mode was moved over to the controls group internally. This just reflects this in the log. * main: load settings if the file has a title id In other words, don't exit if the loader has trouble getting a title id. * use a zero * settings: initalize resolution factor with constructor instead of casting * Revert "settings: initalize resolution factor with constructor instead of casting" This reverts commit 54c35ecb46a29953842614620f9b7de1aa9d5dc8. * configure_graphics: guard device selector when Vulkan is global Prevents the user from editing the device selector if Vulkan is the global renderer backend. Also resets the vulkan_device variable when the users switches back-and-forth between global and Vulkan. * address reviewer concerns Changes function variables to const wherever they don't need to be changed. Sets Settings::Setting to final as it should not be inherited from. Sets ConfigurationShared::use_global_text to static. Co-Authored-By: VolcaEM <volcaem@users.noreply.github.com> * main: load per-game settings after LoadROM This prevents `Restart Emulation` from restoring the global settings *after* the per-game settings were applied. Thanks to BSoDGamingYT for finding this bug. * Revert "main: load per-game settings after LoadROM" This reverts commit 9d0d48c52d2dcf3bfb1806cc8fa7d5a271a8a804. * main: only restore global settings when necessary Loading the per-game settings cannot happen after the ROM is loaded, so we have to specify when to restore the global state. Again thanks to BSoD for finding the bug. * configuration_shared: address reviewer concerns except operator overrides Dropping operator override usage in next commit. Co-Authored-By: LC <lioncash@users.noreply.github.com> * settings: Drop operator overrides from Setting template Requires using GetValue and SetValue explicitly. Also reverts a change that broke title ID formatting in the game properties dialog. * complete rebase * configuration_shared: translate "Use global configuration" Uses ConfigurePerGame to do so, since its usage, at least as of now, corresponds with ConfigurationShared. * configure_per_game: address reviewer concern As far as I understand, it prevents the program from unnecessarily copying strings. Co-Authored-By: LC <lioncash@users.noreply.github.com> Co-authored-by: Morph <39850852+Morph1984@users.noreply.github.com> Co-authored-by: VolcaEM <volcaem@users.noreply.github.com> Co-authored-by: LC <lioncash@users.noreply.github.com>
* Core/Common: Address Feedback.Fernando Sahmkow2020-06-281-1/+1
|
* Services/NvFlinger: Do vSync in a sepparate thread on Multicore.Fernando Sahmkow2020-06-271-2/+6
|
* Core: Split Microprofile Dynarmic timing per CoreFernando Sahmkow2020-06-271-3/+12
|
* General: Correct rebase, sync gpu and context management.Fernando Sahmkow2020-06-271-2/+1
|
* General: Move ARM_Interface into Threads.Fernando Sahmkow2020-06-271-19/+15
|
* SingleCore: Move Host Timing from a sepparate thread to main cpu thread.Fernando Sahmkow2020-06-271-0/+2
|
* GUI: Make multicore only work with Async and add GUI for multicore.Fernando Sahmkow2020-06-271-2/+9
|
* General: Fix microprofile on dynarmic/svc, fix wait tree showing which threads were running.Fernando Sahmkow2020-06-271-0/+15
|
* General: Initial Setup for Single Core.Fernando Sahmkow2020-06-271-0/+3
|
* SVC: Correct GetThreadPriority, SetThreadPriority, GetThreadCoreMask, SetThreadCoreMask, GetCurrentProcessorNumberFernando Sahmkow2020-06-271-0/+8
|
* HostTiming: Pause the hardware clock on pause.Fernando Sahmkow2020-06-271-1/+1
|
* General: Recover Prometheus project from harddrive failure Fernando Sahmkow2020-06-271-27/+30
| | | | | | | This commit: Implements CPU Interrupts, Replaces Cycle Timing for Host Timing, Reworks the Kernel's Scheduler, Introduce Idle State and Suspended State, Recreates the bootmanager, Initializes Multicore system.
* core: system: Rename GetDeviceManager -> DeviceManager.bunnei2020-04-171-4/+4
| | | | - More consistent with other system components.
* core: Construct/Destruct DeviceMemory on Init/Shutdown.bunnei2020-04-171-4/+7
|
* core: device_manager: Add a simple class to manage device RAM.bunnei2020-04-171-1/+11
|
* core: memory: Move to Core::Memory namespace.bunnei2020-04-171-2/+2
| | | | - helpful to disambiguate Kernel::Memory namespace.
* Merge pull request #3552 from jroweboy/single-contextRodrigo Locatti2020-04-021-16/+6
|\ | | | | Refactor Context management (Fixes renderdoc on opengl issues)
| * Address review and fix broken yuzu-tester buildJames Rowe2020-03-261-1/+3
| |
| * Frontend/GPU: Refactor context managementJames Rowe2020-03-251-16/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes the GraphicsContext to be managed by the GPU core. This eliminates the need for the frontends to fool around with tricky MakeCurrent/DoneCurrent calls that are dependent on the settings (such as async gpu option). This also refactors out the need to use QWidget::fromWindowContainer as that caused issues with focus and input handling. Now we use a regular QWidget and just access the native windowHandle() directly. Another change is removing the debug tool setting in FrameMailbox. Instead of trying to block the frontend until a new frame is ready, the core will now take over presentation and draw directly to the window if the renderer detects that its hooked by NSight or RenderDoc Lastly, since it was in the way, I removed ScopeAcquireWindowContext and replaced it with a simple subclass in GraphicsContext that achieves the same result
* | gdbstub: Ensure gdbstub doesn't drop packets crucial to initializationGauvain "GovanifY" Roussel-Tarbouriech2020-03-171-1/+1
|/
* video_core: Reintroduce dirty flags infrastructureReinUsesLisp2020-02-281-0/+1
|
* core: frontend: Refactor scope_acquire_window_context to scope_acquire_context.bunnei2020-02-261-0/+3
|
* System: Expose Host thread registering routines from kernel.Fernando Sahmkow2020-02-221-0/+8
|
* Merge pull request #3337 from ReinUsesLisp/vulkan-stagedbunnei2020-02-031-1/+3
|\ | | | | yuzu: Implement Vulkan frontend
| * core: Only wait for idle on gpu_core when it was initializedReinUsesLisp2020-01-291-1/+3
| | | | | | | | This fixes crashes when a Vulkan device fails to initialize.
* | System: Address FeedbackFernando Sahmkow2020-01-271-2/+2
| |
* | System: Correct PrepareReschedule.Fernando Sahmkow2020-01-261-1/+1
| |
* | Core: Refactor CpuCoreManager to CpuManager and Cpu to Core Manager.Fernando Sahmkow2020-01-261-23/+21
| | | | | | | | This commit instends on better naming the new purpose of this classes.
* | Core: Refactor CPU Management.Fernando Sahmkow2020-01-251-13/+22
|/ | | | This commit moves ARM Interface and Scheduler handling into the kernel.
* yuzu: Remove Maxwell debuggerReinUsesLisp2020-01-031-10/+0
| | | | | This was carried from Citra and wasn't really used on yuzu. It also adds some runtime overhead. This commit removes it from yuzu's codebase.
* core/memory: Introduce skeleton of Memory classLioncash2019-11-271-3/+13
| | | | | | | | | Currently, the main memory management code is one of the remaining places where we have global state. The next series of changes will aim to rectify this. This change simply introduces the main skeleton of the class that will contain all the necessary state.
* Merge pull request #2971 from FernandoS27/new-scheduler-v2David2019-10-281-0/+16
|\ | | | | Kernel: Implement a New Thread Scheduler V2
| * Kernel: Style and CorrectionsFernando Sahmkow2019-10-151-2/+3
| |
| * Correct PrepareRescheduleFernando Sahmkow2019-10-151-0/+5
| |
| * Add interfacing to the Global SchedulerFernando Sahmkow2019-10-151-0/+10
| |
* | core: Fix clang-format errors.bunnei2019-10-191-9/+10
| |
* | Fix null pointer deref.Nicolae-Andrei Cociorba2019-10-181-10/+12
| |
* | core/core: Resolve -Wreorder warningsLioncash2019-10-171-2/+2
| | | | | | | | | | Amends the initializer lists to be ordered in the same manner that they're declared within the class.
* | Merge pull request #2912 from FernandoS27/async-fixesbunnei2019-10-161-0/+2
|\ \ | |/ |/| General fixes to Async GPU
| * Core: Wait for GPU to be idle before shutting down.Fernando Sahmkow2019-10-051-0/+2
| |
* | Merge pull request #2654 from DarkLordZach/lm-log-rewritebunnei2019-10-091-3/+14
|\ \ | | | | | | lm: Rewrite logger to use core reporting services
| * | lm: Flush manager output on core shutdownZach Hilman2019-09-221-0/+2
| | |
| * | core: Add LM::Manager to systemZach Hilman2019-09-221-3/+12
| | | | | | | | | Allows centralized control over logging mechanisms.
* | | hle/service: Replace global system instance calls with instance-based onesLioncash2019-10-061-3/+4
| |/ |/| | | | | | | | | | | | | | | | | Migrates the HLE service code off the use of directly accessing the global system instance where trivially able to do so. This removes all usages of Core::CurrentProcess from the service code, only 8 occurrences of this function exist elsewhere. There's still quite a bit of "System::GetInstance()" being used, however this was able to replace a few instances.
* | core/loader: Track the NSO build ID of the current processZach Hilman2019-09-301-0/+9
|/
* Merge pull request #2683 from DarkLordZach/lock-exitDavid2019-09-221-0/+11
|\ | | | | am: Implement exit locking and self exit commands
| * core: Track system exit lock statusZach Hilman2019-09-221-0/+11
| | | | | | | | Used to determine if yuzu should confirm before pausing or stopping a game.
* | dmnt_cheat_vm: Make Cheat VM compliant to code styleZach Hilman2019-09-221-2/+1
| |
* | core: Initialize cheats after load to avoid VMManager crashZach Hilman2019-09-221-0/+5
| | | | | | This used to occur due to the VMManager being nullptr at the time cheats were registered (during load, but before it was done). This is bypassed by not accessing the VMManager for offset data until load is complete,
* | core: Update RegisterCheatList for new VMZach Hilman2019-09-221-8/+9
|/
* core: Store FileSystemController in coreZach Hilman2019-09-211-0/+24
|
* Add frametime logging for tracking performance over timefearlessTobi2019-09-101-8/+17
| | | | Co-Authored-By: jroweboy <jroweboy@gmail.com>
* service/am: Remove usages of global system accessorsLioncash2019-09-051-1/+2
| | | | | | Avoids the use of global accessors, removing the reliance on global state. This also makes dependencies explicit in the interface, as opposed to being hidden
* Merge pull request #2592 from FernandoS27/sync1bunnei2019-07-261-1/+11
|\ | | | | Implement GPU Synchronization Mechanisms & Correct NVFlinger
| * Gpu: Implement Hardware Interrupt Manager and manage GPU interruptsFernando Sahmkow2019-07-051-1/+11
| |
* | Merge pull request #2651 from DarkLordZach/apm-boost-mode-1bunnei2019-07-081-0/+12
|\ \ | | | | | | apm: Initial implementation of performance config and boost mode
| * | core: Keep instance of APM ControllerZach Hilman2019-06-291-0/+12
| | |
* | | Merge pull request #2642 from DarkLordZach/fsp-log-2bunnei2019-07-081-1/+1
|\ \ \ | |_|/ |/| | fsp-srv: Implement Access Logging Functionality
| * | fsp-srv: Implement OutputAccessLogToSdCardZach Hilman2019-06-291-1/+1
| |/ | | | | | | Allows games to log data to the SD.
* | Merge pull request #2533 from DarkLordZach/memory-frozenbunnei2019-06-281-0/+2
|\ \ | |/ |/| memory: Add class to manage and enforce memory freezing
| * core: Move Freezer class to tools namespaceZach Hilman2019-06-211-2/+2
| |
| * memory: Add class to manage and enforce memory freezingZach Hilman2019-06-211-0/+2
| |
* | glue: Correct missing bytes in ApplicationLaunchParameterZach Hilman2019-06-261-2/+0
| |
* | core: Keep track of ARPManager and register current application on bootZach Hilman2019-06-251-0/+68
| |
* | Merge pull request #2575 from DarkLordZach/process-id-typesbunnei2019-06-211-1/+2
|\ \ | | | | | | kernel: Differentiate kernel and user processes when picking ID
| * | kernel: Differentiate kernel and user processes when picking IDZach Hilman2019-06-101-1/+2
| |/ | | | | | | This allows kernel internal type processes to be assigned IDs in the KIP range while userland processes are assigned in the user range.
* | Merge pull request #2482 from DarkLordZach/prepobunnei2019-06-211-1/+8
|\ \ | |/ |/| core: Add detailed local reporting feature for development
| * loader: Move NSO module tracking to AppLoaderZach Hilman2019-05-261-10/+1
| | | | | | Also cleanup of general stuff
| * core: Add Reporter class to take/save reportsZach Hilman2019-05-251-0/+6
| |
| * core: Track load offsets of NSO modulesZach Hilman2019-05-251-0/+10
| | | | | | | | Needed for backtrace decomposition
* | core/core: Remove unnecessary includesLioncash2019-05-291-8/+0
| | | | | | | | | | The contents of these includes aren't used anywhere in this translation unit.
* | core/loader: Remove LoadKernelSystemModeLioncash2019-05-291-9/+0
| | | | | | | | This is a hold-over from Citra and doesn't apply to yuzu.
* | core/telemetry_session: Remove usages of the global system accessorLioncash2019-05-291-1/+1
|/ | | | | | | | | | | | | | | | Makes the dependency explicit in the TelemetrySession's interface instead of making it a hidden dependency. This also revealed a hidden issue with the way the telemetry session was being initialized. It was attempting to retrieve the app loader and log out title-specific information. However, this isn't always guaranteed to be possible. During the initialization phase, everything is being constructed. It doesn't mean an actual title has been selected. This is what the Load() function is for. This potentially results in dead code paths involving the app loader. Instead, we explicitly add this information when we know the app loader instance is available.
* Merge pull request #2228 from DarkLordZach/applet-manager-p1bunnei2019-04-251-33/+17
|\ | | | | applets: Add AppletManager and implement PhotoViewer and Error applets
| * core: Remove specific applets in favor of AppletManagerZach Hilman2019-04-171-33/+17
| |
* | core/core: Move process execution start to System's Load()Lioncash2019-04-121-1/+5
| | | | | | | | | | | | | | | | | | This gives us significantly more control over where in the initialization process we start execution of the main process. Previously we were running the main process before the CPU or GPU threads were initialized (not good). This amends execution to start after all of our threads are properly set up.
* | core/core: Move main process creation into Load()Lioncash2019-04-121-4/+3
| | | | | | | | | | | | | | | | | | Now that we have dependencies on the initialization order, we can move the creation of the main process to a more sensible area: where we actually load in the executable data. This allows localizing the creation and loading of the process in one location, making the initialization of the process much nicer to trace.
* | video_core/gpu: Create threads separately from initializationLioncash2019-04-121-11/+4
| | | | | | | | | | | | | | | | | | Like with CPU emulation, we generally don't want to fire off the threads immediately after the relevant classes are initialized, we want to do this after all necessary data is done loading first. This splits the thread creation into its own interface member function to allow controlling when these threads in particular get created.
* | core/cpu_core_manager: Create threads separately from initialization.Lioncash2019-04-121-3/+6
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Our initialization process is a little wonky than one would expect when it comes to code flow. We initialize the CPU last, as opposed to hardware, where the CPU obviously needs to be first, otherwise nothing else would work, and we have code that adds checks to get around this. For example, in the page table setting code, we check to see if the system is turned on before we even notify the CPU instances of a page table switch. This results in dead code (at the moment), because the only time a page table switch will occur is when the system is *not* running, preventing the emulated CPU instances from being notified of a page table switch in a convenient manner (technically the code path could be taken, but we don't emulate the process creation svc handlers yet). This moves the threads creation into its own member function of the core manager and restores a little order (and predictability) to our initialization process. Previously, in the multi-threaded cases, we'd kick off several threads before even the main kernel process was created and ready to execute (gross!). Now the initialization process is like so: Initialization: 1. Timers 2. CPU 3. Kernel 4. Filesystem stuff (kind of gross, but can be amended trivially) 5. Applet stuff (ditto in terms of being kind of gross) 6. Main process (will be moved into the loading step in a following change) 7. Telemetry (this should be initialized last in the future). 8. Services (4 and 5 should ideally be alongside this). 9. GDB (gross. Uses namespace scope state. Needs to be refactored into a class or booted altogether). 10. Renderer 11. GPU (will also have its threads created in a separate step in a following change). Which... isn't *ideal* per-se, however getting rid of the wonky intertwining of CPU state initialization out of this mix gets rid of most of the footguns when it comes to our initialization process.
* core: Store system-wide ContentProvider for the emulatorZach Hilman2019-03-271-0/+26
|
* file_sys/cheat_engine: Remove use of global system accessorsLioncash2019-03-221-2/+2
| | | | | Instead, pass in the core timing instance and make the dependency explicit in the interface.
* Merge pull request #1933 from DarkLordZach/cheat-enginebunnei2019-03-221-0/+11
|\ | | | | file_sys: Implement parser and interpreter for game memory cheats
| * vm_manager: Remove cheat-specific ranges from VMManagerZach Hilman2019-03-051-2/+4
| |
| * core: Add support for registering and controlling ownership of CheatEngineZach Hilman2019-03-051-0/+9
| |
* | kernel: Make the address arbiter instance per-processLioncash2019-03-081-1/+1
| | | | | | | | | | | | | | | | | | | | Now that we have the address arbiter extracted to its own class, we can fix an innaccuracy with the kernel. Said inaccuracy being that there isn't only one address arbiter. Each process instance contains its own AddressArbiter instance in the actual kernel. This fixes that and gets rid of another long-standing issue that could arise when attempting to create more than one process.
* | Merge pull request #2055 from bunnei/gpu-threadbunnei2019-03-071-3/+10
|\ \ | | | | | | Asynchronous GPU command processing
| * | gpu: Refactor a/synchronous implementations into their own classes.bunnei2019-03-071-2/+7
| | |
| * | gpu: Refactor to take RendererBase instead of RasterizerInterface.bunnei2019-03-071-1/+1
| | |
| * | core: Set is_powered_on before GPU is initialized.bunnei2019-03-071-1/+3
| | |
* | | Merge pull request #2190 from lioncash/ogl-globalbunnei2019-03-071-7/+7
|\ \ \ | |/ / |/| | core: Remove the global telemetry accessor function
| * | core/core: Replace direct usage of the global system telemetry accessor from Shutdown()Lioncash2019-03-041-7/+7
| |/ | | | | | | | | The telemetry instance is actually a member of the class itself, so we can access it directly instead of going through the global accessor.
* / kernel/address_arbiter: Pass in system instance to constructorLioncash2019-03-051-2/+3
|/ | | | | Allows getting rid of reliance on the global accessor functions and instead operating on the provided system instance.
* video_core: Remove usages of System::GetInstance() within the enginesLioncash2019-02-161-1/+1
| | | | | Avoids the use of the global accessor in favor of explicitly making the system a dependency within the interface.
* core_timing: Convert core timing into a classLioncash2019-02-161-5/+14
| | | | | | | | | | | Gets rid of the largest set of mutable global state within the core. This also paves a way for eliminating usages of GetInstance() on the System class as a follow-up. Note that no behavioral changes have been made, and this simply extracts the functionality into a class. This also has the benefit of making dependencies on the core timing functionality explicit within the relevant interfaces.
* core_timing: Rename CoreTiming namespace to Core::TimingLioncash2019-02-121-3/+3
| | | | | | Places all of the timing-related functionality under the existing Core namespace to keep things consistent, rather than having the timing utilities sitting in its own completely separate namespace.
* gl_shader_cache: Link loading screen with disk shader cache loadReinUsesLisp2019-02-071-2/+0
|
* gl_shader_disk_cache: Pass core system as argument and guard against games without title idsReinUsesLisp2019-02-071-1/+1
|
* rasterizer_interface: Add disk cache entry for the rasterizerReinUsesLisp2019-02-071-0/+3
|
* core/frontend/applets/web_browser: Make OpenPage() non-constLioncash2019-01-171-6/+10
| | | | | | | | This is a function that definitely doesn't always have a non-modifying behavior across all implementations, so this should be made non-const. This gets rid of the need to mark data members as mutable to work around the fact mutating data members needs to occur.
* Merge pull request #1959 from DarkLordZach/custom-rtcbunnei2019-01-101-0/+6
|\ | | | | settings: Add support for setting the RTC manually
| * settings: Use std::chrono::seconds instead of s64 for RTCZach Hilman2019-01-081-2/+1
| |
| * core: Set custom RTC differential on game bootZach Hilman2019-01-081-0/+7
| |
* | web_browser: Add bounds checking to applet interfaceZach Hilman2018-12-291-0/+5
| |
* | core: Add getter and setter for WebBrowserApplet frontendZach Hilman2018-12-281-0/+13
|/
* Merge pull request #1781 from DarkLordZach/applet-profile-selectbunnei2018-12-231-0/+11
|\ | | | | am: Implement HLE profile selector applet
| * core: Add getter/setter for ProfileSelector in SystemZach Hilman2018-12-031-0/+11
| |
* | core: Make GetGameFileFromPath function externally accessibleZach Hilman2018-12-031-3/+5
|/
* core: Relocate CPU core management to its own classLioncash2018-11-221-97/+22
| | | | | | | | | | | | | | | | | | | | | | | | Keeps the CPU-specific behavior from being spread throughout the main System class. This will also act as the home to contain member functions that perform operations on all cores. The reason for this being that the following pattern is sort of prevalent throughout sections of the codebase: If clearing the instruction cache for all 4 cores is necessary: Core::System::GetInstance().ArmInterface(0).ClearInstructionCache(); Core::System::GetInstance().ArmInterface(1).ClearInstructionCache(); Core::System::GetInstance().ArmInterface(2).ClearInstructionCache(); Core::System::GetInstance().ArmInterface(3).ClearInstructionCache(); This is kind of... well, silly to copy around whenever it's needed. especially when it can be reduced down to a single line. This change also puts the basics in place to begin "ungrafting" all of the forwarding member functions from the System class that are used to access CPU state or invoke CPU-specific behavior. As such, this change itself makes no changes to the direct external interface of System. This will be covered by another changeset.
* am: Deglobalize software keyboard appletZach Hilman2018-11-181-0/+17
|
* global: Use std::optional instead of boost::optional (#1578)Frederic L2018-10-301-1/+1
| | | | | | | | | | | | | | | | * get rid of boost::optional * Remove optional references * Use std::reference_wrapper for optional references * Fix clang format * Fix clang format part 2 * Adressed feedback * Fix clang format and MacOS build
* core: Add missing const variants of getters for the System classLioncash2018-10-281-2/+26
| | | | | | Many of the Current<Thing> getters (as well as a few others) were missing const qualified variants, which makes it a pain to retrieve certain things from const qualified references to System.
* core: Remove unnecessary assert in ArmInterface()Lioncash2018-10-181-2/+1
| | | | | CpuCore already does this sort of checking, so we can just call that instead of duplicating the assertions.
* core_cpu: Make Cpu scheduler instances unique_ptrs instead of shared_ptrsLioncash2018-10-151-4/+12
|
* core: Make the live Cpu instances unique_ptrs instead of shared_ptrsLioncash2018-10-151-9/+9
| | | | | | | | There's no need for shared ownership here, as the only owning class instance of those Cpu instances is the System class itself. We can also make the thread_to_cpu map use regular pointers instead of shared_ptrs, given that the Cpu instances will always outlive the cases where they're used with that map.
* core: Make the exclusive monitor a unique_ptr instead of a shared_ptrLioncash2018-10-151-2/+3
| | | | | | Like the barrier, this is owned entirely by the System and will always outlive the encompassing state, so shared ownership semantics aren't necessary here.
* core: Make CPUBarrier a unique_ptr instead of a shared_ptrLioncash2018-10-151-3/+3
| | | | | | This will always outlive the Cpu instances, since it's destroyed after we destroy the Cpu instances on shutdown, so there's no need for shared ownership semantics here.
* filesystem: Make CreateFactories() and InstallInterface() take a VfsFilesystem instance by referenceLioncash2018-10-131-1/+1
| | | | | | | Neither of these functions alter the ownership of the provided pointer, so we can simply make the parameters a reference rather than a direct shared pointer alias. This way we also disallow passing incorrect memory values like nullptr.
* kernel/thread: Use a regular pointer for the owner/current processLioncash2018-10-101-3/+4
| | | | | | | | | | | There's no real need to use a shared pointer in these cases, and only makes object management more fragile in terms of how easy it would be to introduce cycles. Instead, just do the simple thing of using a regular pointer. Much of this is just a hold-over from citra anyways. It also doesn't make sense from a behavioral point of view for a process' thread to prolong the lifetime of the process itself (the process is supposed to own the thread, not the other way around).
* loader: Make the Load() function take a process as a regular reference, not a SharedPtrLioncash2018-09-291-1/+1
| | | | | | | | A process should never require being reference counted in this situation. If the handle to a process is freed before this function is called, it's definitely a bug with our lifetime management, so we can put the requirement in place for the API that the process must be a valid instance.
* vfs_concat/vfs_layered: Remove friend declarations from ConcatenatedVfsFileLioncash2018-09-261-1/+1
| | | | | | Given these are only added to the class to allow those functions to access the private constructor, it's a better approach to just make them static functions in the interface, to make the dependency explicit.
* Port #4182 from Citra: "Prefix all size_t with std::"fearlessTobi2018-09-151-7/+7
|
* core: Migrate current_process pointer to the kernelLioncash2018-09-071-4/+7
| | | | | | | | | | Given we now have the kernel as a class, it doesn't make sense to keep the current process pointer within the System class, as processes are related to the kernel. This also gets rid of a subtle case where memory wouldn't be freed on core shutdown, as the current_process pointer would never be reset, causing the pointed to contents to continue to live.
* core/core: Remove unnecessary sm/controller includeLioncash2018-09-061-1/+0
| | | | | | | | | | The only reason this include was necessary, was because the constructor wasn't defaulted in the cpp file and the compiler would inline it wherever it was used. However, given Controller is forward declared, all those inlined constructors would see an incomplete type, causing a compilation failure. So, we just place the constructor in the cpp file, where it can see the complete type definition, allowing us to remove this include.
* core: Use a raw pointer in GetGPUDebugContext.Markus Wick2018-09-041-2/+2
| | | | This helper is called very often. The memory ownership shall not be transfered, so just return the raw pointer.
* vfs_real: Forward declare IOFileLioncash2018-09-021-2/+3
| | | | | | Eliminates the need to rebuild some source files if the file_util header ever changes. This also uncovered some indirect inclusions, which have also been fixed.
* core/core: Replace includes with forward declarations where applicableLioncash2018-08-311-4/+15
| | | | | | | | | | | The follow-up to e2457418dae19b889b2ad85255bb95d4cd0e4bff, which replaces most of the includes in the core header with forward declarations. This makes it so that if any of the headers the core header was previously including change, then no one will need to rebuild the bulk of the core, due to core.h being quite a prevalent inclusion. This should make turnaround for changes much faster for developers.
* core: Make the main System class use the PImpl idiomLioncash2018-08-311-174/+341
| | | | | | | | | | | | | core.h is kind of a massive header in terms what it includes within itself. It includes VFS utilities, kernel headers, file_sys header, ARM-related headers, etc. This means that changing anything in the headers included by core.h essentially requires you to rebuild almost all of core. Instead, we can modify the System class to use the PImpl idiom, which allows us to move all of those headers to the cpp file and forward declare the bulk of the types that would otherwise be included, reducing compile times. This change specifically only performs the PImpl portion.
* kernel: Eliminate kernel global stateLioncash2018-08-291-4/+12
| | | | | | | | | | | | | | | | | | | | | | As means to pave the way for getting rid of global state within core, This eliminates kernel global state by removing all globals. Instead this introduces a KernelCore class which acts as a kernel instance. This instance lives in the System class, which keeps its lifetime contained to the lifetime of the System class. This also forces the kernel types to actually interact with the main kernel instance itself instead of having transient kernel state placed all over several translation units, keeping everything together. It also has a nice consequence of making dependencies much more explicit. This also makes our initialization a tad bit more correct. Previously we were creating a kernel process before the actual kernel was initialized, which doesn't really make much sense. The KernelCore class itself follows the PImpl idiom, which allows keeping all the implementation details sealed away from everything else, which forces the use of the exposed API and allows us to avoid any unnecessary inclusions within the main kernel header.
* core: Remove always true conditionals in Load()Lioncash2018-08-241-7/+4
| | | | | These conditions are always true, since the outer conditional already checks for these conditions.
* qt: Add 'Install to NAND' option to menuZach Hilman2018-08-121-0/+1
| | | | Prompts for title type on NCA files.
* loader: Join 0* files in directory if filename is 00Zach Hilman2018-08-121-1/+33
| | | | i.e. Load the concatenated 00+01 if 01 exists as well. Needed for split NAND NCAs.
* core: Namespace EmuWindowLioncash2018-08-121-2/+2
| | | | Gets the class out of the global namespace.
* loader: Add more descriptive errorsZach Hilman2018-08-101-22/+4
| | | Full list of new errors and descriptions in core/loader/loader.h
* core: Port core to VfsFilesystem for file accessZach Hilman2018-08-091-2/+6
|
* GDBStub works with both Unicorn and Dynarmic now (#941)Hedges2018-08-071-1/+4
| | | | | | * GDBStub works with both Unicorn and Dynarmic now * Tidy up
* Merge pull request #912 from lioncash/global-varbunnei2018-08-051-3/+6
|\ | | | | video_core: Eliminate the g_renderer global variable
| * renderer_base: Make Rasterizer() return the rasterizer by referenceLioncash2018-08-041-1/+1
| | | | | | | | | | | | | | All calling code assumes that the rasterizer will be in a valid state, which is a totally fine assumption. The only way the rasterizer wouldn't be is if initialization is done incorrectly or fails, which is checked against in System::Init().
| * video_core: Eliminate the g_renderer global variableLioncash2018-08-041-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We move the initialization of the renderer to the core class, while keeping the creation of it and any other specifics in video_core. This way we can ensure that the renderer is initialized and doesn't give unfettered access to the renderer. This also makes dependencies on types more explicit. For example, the GPU class doesn't need to depend on the existence of a renderer, it only needs to care about whether or not it has a rasterizer, but since it was accessing the global variable, it was also making the renderer a part of its dependency chain. By adjusting the interface, we can get rid of this dependency.
* | Merge pull request #849 from DarkLordZach/xcibunnei2018-08-041-4/+8
|\ \ | |/ |/| XCI and Encrypted NCA Support
| * Use more descriptive error codes and messagesZach Hilman2018-08-011-4/+8
| |
* | core/memory: Get rid of 3DS leftoversLioncash2018-08-031-3/+3
| | | | | | | | Removes leftover code from citra that isn't needed.
* | Merge pull request #892 from lioncash/globalbunnei2018-08-031-2/+2
|\ \ | | | | | | video_core: Make global EmuWindow instance part of the base renderer …
| * | video_core: Make global EmuWindow instance part of the base renderer classLioncash2018-08-021-2/+2
| |/ | | | | | | | | | | | | | | | | | | | | Makes the global a member of the RendererBase class. We also change this to be a reference. Passing any form of null pointer to these functions is incorrect entirely, especially given the code itself assumes that the pointer would always be in a valid state. This also makes it easier to follow the lifecycle of instances being used, as we explicitly interact the renderer with the rasterizer, rather than it just operating on a global pointer.
* | Merge pull request #894 from lioncash/objectbunnei2018-08-031-1/+0
|\ \ | | | | | | kernel: Move object class to its own source files
| * | kernel: Move object class to its own source filesLioncash2018-08-021-1/+0
| |/ | | | | | | | | | | General moving to keep kernel object types separate from the direct kernel code. Also essentially a preliminary cleanup before eliminating global kernel state in the kernel code.
* / hw: Remove unused filesLioncash2018-08-021-3/+0
|/ | | | | | None of these files are used in any meaningful way. They're just leftovers from citra. Also has the benefit of getting rid of an unused global variable.
* audio_core: Move to audout_u impl.bunnei2018-07-311-2/+0
| | | | - This is necessary so streams are created on the same thread.
* core: Add AudioCore to global state.bunnei2018-07-281-0/+2
|
* Implement exclusive monitorMerryMage2018-07-221-1/+2
|
* Merge pull request #687 from lioncash/instancebunnei2018-07-191-1/+3
|\ | | | | core: Don't construct instance of Core::System, just to access its live instance
| * core: Make System's default constructor privateLioncash2018-07-191-0/+2
| | | | | | | | | | | | This makes it a compilation error to construct additional instances of the System class directly, preventing accidental wasteful constructions over and over.
| * core: Don't construct instance of Core::System, just to access its live instanceLioncash2018-07-191-1/+1
| | | | | | | | | | | | | | | | | | This would result in a lot of allocations and related object construction, just to toss it all away immediately after the call. These are definitely not intentional, and it was intended that all of these should have been accessing the static function GetInstance() through the name itself, not constructed instances.
* | Virtual Filesystem 2: Electric Boogaloo (#676)Zach Hilman2018-07-191-1/+2
|/ | | | | | | | | | * Virtual Filesystem * Fix delete bug and documentate * Review fixes + other stuff * Fix puyo regression
* Revert "Virtual Filesystem (#597)"bunnei2018-07-081-2/+1
| | | | This reverts commit 77c684c1140f6bf3fb7d4560d06d2efb1a2ee5e2.
* Virtual Filesystem (#597)Zach Hilman2018-07-061-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add VfsFile and VfsDirectory classes * Finish abstract Vfs classes * Implement RealVfsFile (computer fs backend) * Finish RealVfsFile and RealVfsDirectory * Finished OffsetVfsFile * More changes * Fix import paths * Major refactor * Remove double const * Use experimental/filesystem or filesystem depending on compiler * Port partition_filesystem * More changes * More Overhaul * FSP_SRV fixes * Fixes and testing * Try to get filesystem to compile * Filesystem on linux * Remove std::filesystem and document/test * Compile fixes * Missing include * Bug fixes * Fixes * Rename v_file and v_dir * clang-format fix * Rename NGLOG_* to LOG_* * Most review changes * Fix TODO * Guess 'main' to be Directory by filename
* Update clang formatJames Rowe2018-07-031-2/+2
|
* Rename logging macro back to LOG_*James Rowe2018-07-031-7/+7
|
* core: Run all CPU cores separately, even in single-thread mode.bunnei2018-05-111-6/+20
|
* threading: Reschedule only on cores that are necessary.bunnei2018-05-111-0/+5
|
* core: Add a configuration setting for use_multi_core.bunnei2018-05-111-6/+26
|
* core: Support session close with multicore.bunnei2018-05-111-4/+11
|
* core: Create a thread for each CPU core, keep in lock-step with a barrier.bunnei2018-05-111-5/+25
|
* core: Move common CPU core things to its own class.bunnei2018-05-111-48/+9
|
* core: Replace remaining old non-generic logger usages with fmt-capable equivalentsLioncash2018-04-261-11/+11
| | | | | | LOG_GENERIC usages will be amended in a follow-up to keep API changes separate from interface changes, as it will require removing a parameter from the relevant function in the VMManager class.
* core: Relocate g_service_manager to the System classLioncash2018-04-211-6/+22
| | | | | Converts the service manager from a global into an instance-based variable.
* core, main.h: Abort on 32Bit ROMs (#309)N00byKing2018-04-061-0/+4
| | | | | | * core, main.h: Abort on 32Bit ROMs * main.cpp: Fix Grammar
* config: Use simplified checkbox (from Citra) for CPU JIT.bunnei2018-03-271-7/+3
|
* Clang FixesN00byKing2018-03-191-1/+2
|
* More Warning cleanupsN00byKing2018-03-191-1/+1
|
* Clean Warnings (?)N00byKing2018-03-191-1/+1
|
* Merge pull request #193 from N00byKing/3184_2_robotic_boogaloobunnei2018-03-191-4/+8
|\ | | | | Implement Pull #3184 from citra: core/arm: Improve timing accuracy before service calls in JIT (Rebased)
| * Implements citra-emu/citra#3184N00byKing2018-02-251-4/+8
| |
* | core: Move process creation out of global state.bunnei2018-03-141-1/+3
| |
* | core: Fix scheduler-shutdown related crashMerryMage2018-02-211-5/+9
| |
* | scheduler: Cleanup based on PR feedback.bunnei2018-02-191-1/+1
| |
* | kernel: Use Scheduler class for threading.bunnei2018-02-181-1/+2
| |
* | core: Use shared_ptr for cpu_core.bunnei2018-02-181-3/+3
|/
* Make a GPU class in VideoCore to contain the GPU state.Subv2018-02-121-0/+2
| | | | Also moved the GPU MemoryManager class to video_core since it makes more sense for it to be there.
* Merge pull request #72 from N00byKing/patch-2bunnei2018-01-211-1/+0
|\ | | | | Implement Pull #3275 from citra: core: Don't Shutdown before we've even Init-ed
| * Update core.cppN00byKing2018-01-171-1/+0
| |
* | Port citra #3352 to yuzu (#103)River City Ransomware2018-01-201-0/+7
|/ | | | | | | | | | * Port citra #3352 to yuzu This change allows non x86_64 architectures to compile yuzu by skipping the building of dynarmic * Fixed clang-format errors * fixes more clang-format errors
* Remove gpu debugger and get yuzu qt to compileJames Rowe2018-01-131-8/+0
|
* configuration: Add cpu_core configuration optionMerryMage2018-01-121-2/+10
|
* arm_dynarmic: Implement coreMerryMage2018-01-121-1/+3
|
* CoreTiming: Reworked CoreTiming (cherry-picked from Citra #3119)B3n302018-01-091-0/+1
| | | | * CoreTiming: New CoreTiming; Add Test for CoreTiming
* unicorn: Use for arm interface on Windows.bunnei2018-01-041-8/+1
|
* arm: Remove SkyEye/Dyncom code that is ARMv6-only.bunnei2018-01-031-3/+2
|
* logging: Rename category "Core_ARM11" to "Core_ARM".bunnei2017-10-231-1/+1
|
* Merge remote-tracking branch 'upstream/master' into nxbunnei2017-10-101-3/+9
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # Conflicts: # src/core/CMakeLists.txt # src/core/arm/dynarmic/arm_dynarmic.cpp # src/core/arm/dyncom/arm_dyncom.cpp # src/core/hle/kernel/process.cpp # src/core/hle/kernel/thread.cpp # src/core/hle/kernel/thread.h # src/core/hle/kernel/vm_manager.cpp # src/core/loader/3dsx.cpp # src/core/loader/elf.cpp # src/core/loader/ncch.cpp # src/core/memory.cpp # src/core/memory.h # src/core/memory_setup.h
| * Loaders: Don't automatically set the current process every time we load an application.Subv2017-09-271-2/+4
| | | | | | | | The loaders will now just create a Kernel::Process, construct it and return it to the caller, which is responsible for setting it as the current process and configuring the global page table.
| * Kernel/Memory: Give each Process its own page table.Subv2017-09-101-1/+0
| | | | | | | | The loader is in charge of setting the newly created process's page table as the main one during the loading process.
| * Added missing parts in libnetwork (#2838)B3n302017-08-191-0/+5
|/ | | | | * Network: Set and send the game information over enet Added Callbacks for RoomMember and GetMemberList to Room in preparation for web_services.
* telemetry: Log performance, configuration, and system data.bunnei2017-07-181-0/+10
|
* Addressed Bunnei's review comments, and made some other tweaks:TheKoopaKingdom2017-06-031-6/+5
| | | | | - Deleted GetStatus() because it wasn't used anywhere outside of Core::System. - Fixed design flaw where the message bar status could be set despite the game being stopped.
* Created a whitelist of system archives to prevent false positives creating dialogs.TheKoopaKingdom2017-06-031-4/+2
|
* Made some changes from review comments:TheKoopaKingdom2017-06-031-9/+13
| | | | | | | | - Made LoadKernelSystemMode return a pair consisting of a system mode and a result code (Could use review). - Deleted ErrorOpenGL error code in favor of just having ErrorVideoCore. - Made dialog messages more clear. - Compared archive ID in fs_user.cpp to ArchiveIdCode::NCCH as opposed to hex magic. - Cleaned up some other stuff.
* Added system for handling core errors in citra-qt.TheKoopaKingdom2017-06-031-6/+18
|
* core: Keep track of telemetry for the current emulation session.bunnei2017-05-251-0/+3
|
* Kernel: Map special regions according to ExHeaderYuri Kunde Schlesner2017-05-101-2/+3
| | | | | | | This replaces the hardcoded VRAM/DSP mappings with ones made based on the ExHeader ARM11 Kernel caps list. While this has no visible effect for most applications (since they use a standard set of mappings) it does improve support for system modules and n3DS exclusives.
* Core: Make PerfStats internally lockedYuri Kunde Schlesner2017-02-271-3/+2
| | | | More ergonomic to use and will be required for upcoming changes.
* Add performance statistics to status barYuri Kunde Schlesner2017-02-271-0/+9
|
* core: Free AppLoader on shutdown to release file (#2558)Yuri Kunde Schlesner2017-02-111-9/+2
| | | Fixes #2455
* Core: reset cpu_core in Shutdown to make IsPoweredOn work properlywwylele2016-12-241-0/+1
|
* core: Replace "AppCore" nomenclature with just "CPU".bunnei2016-12-221-7/+7
|
* Address clang-format issues.bunnei2016-12-221-3/+3
|
* core: Remove HLE module, consolidate code & various cleanups.bunnei2016-12-221-7/+19
|
* core: Consolidate core and system state, remove system module & cleanups.bunnei2016-12-221-25/+87
|
* gdbstub: Remove global variable from public interfaceLioncash2016-12-151-1/+1
| | | | | | | | | Currently, this is only ever queried, so adding a function to check if the server is enabled is more sensible. If directly modifying this externally is ever desirable, it should be done by adding a function to the interface, rather than exposing implementation details directly.
* Use negative priorities to avoid special-casing the self-includeYuri Kunde Schlesner2016-09-211-1/+1
|
* Remove empty newlines in #include blocks.Emmanuel Gil Peyrot2016-09-211-3/+1
| | | | | | | This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation.
* Manually tweak source formatting and then re-run clang-formatYuri Kunde Schlesner2016-09-191-2/+1
|
* Sources: Run clang-format on everything.Emmanuel Gil Peyrot2016-09-181-2/+3
|
* core: Add configuration option for CPU JIT.bunnei2016-09-151-7/+12
|
* Merge pull request #1762 from bunnei/globalbunnei2016-05-061-1/+1
|\ | | | | hle: Get rid of direct global access to g_reschedule
| * HLE: Rename RescheduleIsPending to IsReschedulePending.bunnei2016-05-061-1/+1
| |
| * hle: Get rid of global access to g_rescheduleLioncash2016-03-211-1/+1
| | | | | | | | | | This shouldn't be directly exposed if there's already a partial API that operates on it. We can just provide the rest of that API.
* | Common: Remove Common::make_unique, use std::make_uniqueMerryMage2016-04-051-3/+2
|/
* Improve error report from Init() functionsLittleWhite2016-03-081-2/+1
| | | | Add error popup when citra initialization failed
* core: Use unique_ptr for holding the interpreter instancesLioncash2015-12-301-6/+9
|
* Implement gdbstubpolaris-2015-10-041-0/+17
|
* Core: Cleanup core includes.Emmanuel Gil Peyrot2015-06-281-3/+0
|
* Memmap: Re-organize memory function in two filesYuri Kunde Schlesner2015-05-151-1/+0
| | | | | | | memory.cpp/h contains definitions related to acessing memory and configuring the address space mem_map.cpp/h contains higher-level definitions related to configuring the address space accoording to the kernel and allocating memory.
* Thread: Remove the idle threadYuri Kunde Schlesner2015-05-121-2/+2
| | | | Instead just use nullptr to represent no thread is active.
* Core/Memory: Give every emulated thread it's own TLS area.Subv2015-05-111-4/+0
| | | | | The TLS area for thread T with id Ti is located at TLS_AREA_VADDR + (Ti - 1) * 0x200. This allows some games like Mario Kart 7 to continue further.
* Memory: Re-organize and rename memory area address constantsYuri Kunde Schlesner2015-05-091-1/+1
|
* Common: Remove common.hYuri Kunde Schlesner2015-05-071-0/+1
|
* core: Migrate 3DS-specific CP15 register setting into InitLioncash2015-04-061-0/+5
|
* dyncom: Switch the app and system cores into the correct mode at initializationLioncash2015-02-131-5/+4
|
* arm: Adios armemuLioncash2015-02-011-12/+2
|
* Thread: Reduce use of Handles and move some funcs to inside the class.Yuri Kunde Schlesner2015-01-091-1/+1
|
* Move ThreadContext to core/core.h and deal with the falloutYuri Kunde Schlesner2015-01-091-0/+1
|
* Core: Fixed a crash and removed some unused variables.Subv2015-01-091-6/+0
| | | | ARM_Disasm only has static methods, so there's no need to have an instance of it.
* Threads: Use a dummy idle thread when no other are ready.Subv2015-01-081-1/+12
| | | | This thread will not actually execute instructions, it will only advance the timing/events and try to yield immediately to the next ready thread, if there aren't any ready threads then it will be rescheduled and start its job again.
* Core: Change default CPU to dyncom.bunnei2015-01-031-2/+2
|
* License changepurpasmart962014-12-211-1/+1
|
* Convert old logging calls to new logging macrosYuri Kunde Schlesner2014-12-131-2/+2
|
* Add static to some variablesLioncash2014-11-191-7/+7
|
* Use configuration files to enable or disable the new dyncom interpreter.archshift2014-10-281-3/+14
|
* core: Prune redundant includesarchshift2014-09-091-6/+0
|
* Core: Refactor core to use only one function for execution.bunnei2014-08-311-18/+8
| | | | | | Core: Cleaned up comment to be more readable. Citra: Changed loop to be more readable.
* GSP: Implements preliminary command synchronization via GPU interrupts.bunnei2014-08-061-8/+12
| | | | Core: Added a comment to explain the logic for the RunLoop iterations.
* Merge branch 'threading' of https://github.com/bunnei/citrabunnei2014-06-141-6/+17
|\ | | | | | | | | | | Conflicts: src/core/hle/function_wrappers.h src/core/hle/service/gsp.cpp
| * HLE: Updated all uses of NULL to nullptr (to be C++11 compliant)bunnei2014-06-131-4/+4
| |
| * Core: Cleaned up SingleStep(), updated default LCD refresh to assume each instruction is ~3 cyclesbunnei2014-06-131-11/+12
| |
| * Core: Changed HW update/thread reschedule to occur more frequently (assume each instruction is ~3 cycles)bunnei2014-06-131-2/+2
| |
| * hle: added a hokey way to force a thread reschedule during CPU single step mode (as used by the debugger)bunnei2014-06-051-1/+2
| |
| * core: changed time delay before kernel reschedule to "approximate" a screen refreshbunnei2014-05-301-3/+12
|/
* core: added Kernel::Reschedule() call to check for thread changes, shortened delay time to 100 instructionsbunnei2014-05-231-1/+6
|
* updated how we call ARM core to make things much fasterbunnei2014-05-171-3/+6
|
* cleaned up some logging messagesbunnei2014-04-111-20/+2
|
* added initial modules for setting up SysCall HLEbunnei2014-04-111-0/+18
|
* fixed project includes to use new directory structurebunnei2014-04-091-6/+8
|
* got rid of 'src' folders in each sub-projectbunnei2014-04-091-0/+58