* IPC refactor part 2: Use ReplyAndReceive on HLE services and remove special handling from kernel
* Fix for applet transfer memory + some nits
* Keep handles if possible to avoid server handle table exhaustion
* Fix IPC ZeroFill bug
* am: Correctly implement CreateManagedDisplayLayer and implement CreateManagedDisplaySeparableLayer
CreateManagedDisplaySeparableLayer is requires since 10.x+ when appletResourceUserId != 0
* Make it exit properly
* Make ServiceNotImplementedException show the full message again
* Allow yielding execution to avoid starving other threads
* Only wait if active
* Merge IVirtualMemoryManager and IAddressSpaceManager
* Fix Ro loading data from the wrong process
Co-authored-by: Thog <me@thog.eu>
This is an issue happening when you change your datetime format on your
system and try to sort via last played datetime. DateTime.Parse use the
current thread culture and will not parse date correctly, effectively
causing a crash.
As such, I added a check when loading the game list that ensure that the
datetime is valid in current culture.
Fix#1727.
* gui: Toggle between docked/handheld mode by clicking status bar
This PR just add a way to toggle between the docked and the handheld mode by clicking the lable in the status bar.
Nothing more.
* Fix glade file formatting
* Add VSync toggle
* shader cache: Fix Linux boot issues
This rollback the init logic back to previous state, and replicate the
way PTC handle initialization.
* shader cache: set default state of ready for translation event to false
* Fix cpu unit tests
* Standardize to camel-case: option to check for updates on launch
Updates the "Check for updates on launch" to read instead "Check For Updates On Launch" to be consistent with camel-case options elsewhere in the UI. This time done with manual editing instead of with the Glade app.
* Updated to match general English rules on articles and conjunctions
* SettingsWindow: Add an Apply button
Adds an apply button that doesnt close the settings window when saving
the changes.
* fix the apply button staying turned on after clicking it
Here come Salieri, my implementation of a disk shader cache!
"I'm sure you know why I named it that."
"It doesn't really mean anything."
This implementation collects shaders at runtime and cache them to be later compiled when starting a game.
* fix stalling when server is offline
* add retry timer to fail server connections, fix alt slot number
* fix alt slot key issue
* fix crash when saving controller config with empty fields
* code fixes
* add index check in motion hid update, made HandleResponse async
Co-authored-by: Emmanuel <nhv3@localhost.localdomain>
* WIP Range Tracking
- Texture invalidation seems to have large problems
- Buffer/Pool invalidation may have problems
- Mirror memory tracking puts an additional `add` in compiled code, we likely just want to make HLE access slower if this is the final solution.
- Native project is in the messiest possible location.
- [HACK] JIT memory access always uses native "fast" path
- [HACK] Trying some things with texture invalidation and views.
It works :)
Still a few hacks, messy things, slow things
More work in progress stuff (also move to memory project)
Quite a bit faster now.
- Unmapping GPU VA and CPU VA will now correctly update write tracking regions, and invalidate textures for the former.
- The Virtual range list is now non-overlapping like the physical one.
- Fixed some bugs where regions could leak.
- Introduced a weird bug that I still need to track down (consistent invalid buffer in MK8 ribbon road)
Move some stuff.
I think we'll eventually just put the dll and so for this in a nuget package.
Fix rebase.
[WIP] MultiRegionHandle variable size ranges
- Avoid reprotecting regions that change often (needs some tweaking)
- There's still a bug in buffers, somehow.
- Might want different api for minimum granularity
Fix rebase issue
Commit everything needed for software only tracking.
Remove native components.
Remove more native stuff.
Cleanup
Use a separate window for the background context, update opentk. (fixes linux)
Some experimental changes
Should get things working up to scratch - still need to try some things with flush/modification and res scale.
Include address with the region action.
Initial work to make range tracking work
Still a ton of bugs
Fix some issues with the new stuff.
* Fix texture flush instability
There's still some weird behaviour, but it's much improved without this. (textures with cpu modified data were flushing over it)
* Find the destination texture for Buffer->Texture full copy
Greatly improves performance for nvdec videos (with range tracking)
* Further improve texture tracking
* Disable Memory Tracking for view parents
This is a temporary approach to better match behaviour on master (where invalidations would be soaked up by views, rather than trigger twice)
The assumption is that when views are created to a texture, they will cover all of its data anyways. Of course, this can easily be improved in future.
* Introduce some tracking tests.
WIP
* Complete base tests.
* Add more tests for multiregion, fix existing test.
* Cleanup Part 1
* Remove unnecessary code from memory tracking
* Fix some inconsistencies with 3D texture rule.
* Add dispose tests.
* Use a background thread for the background context.
Rather than setting and unsetting a context as current, doing the work on a dedicated thread with signals seems to be a bit faster.
Also nerf the multithreading test a bit.
* Copy to texture with matching alignment
This extends the copy to work for some videos with unusual size, such as tutorial videos in SMO. It will only occur if the destination texture already exists at XCount size.
* Track reads for buffer copies. Synchronize new buffers before copying overlaps.
* Remove old texture flushing mechanisms.
Range tracking all the way, baby.
* Wake the background thread when disposing.
Avoids a deadlock when games are closed.
* Address Feedback 1
* Separate TextureCopy instance for background thread
Also `BackgroundContextWorker.InBackground` for a more sensible idenfifier for if we're in a background thread.
* Add missing XML docs.
* Address Feedback
* Maybe I should start drinking coffee.
* Some more feedback.
* Remove flush warning, Refocus window after making background context
* Replace Host FPS with FIFO%
* Change measurement order. Improve calculation.
Now at 100% when FIFO is blocking game exectution, rather than "0".
* Address feedback (1)
* Remove Host FPS
* FIFO rather than Fifo
* Address Ac_k feedback
* Rebase
* hos/gui: Add a check of NCA program index in titleid
This add a check to `ApplicationLoader` for the last 2 digits of the game TitleId who seems to be the NCA program index.
We currently return the last index, instead of the lower one.
Same check is added to ApplicationLibrary in the UI.
I've cleaned up both file too.
* hle: implement partial relaunch logic
TODO: make the emulator auto relauch.
* Handle auto relaunch
* hle: Unify update usage system
* hle: Implement support of multi programs in update system
* Add some documentation
* Address rip's comment
Co-authored-by: Ac_K <Acoustik666@gmail.com>
This update the "No keys" dialog and block starting NSP/XCI/NCA without firmware.
Also propose to the user if they want to install firmware if they start an untrimmed XCI and remove KEYS.md as it was completely outdated.
PS: Also fix a bug with "&" in URL with OpenUrl on Windows.
This project wasn't really used by anyone and isn't worth mantaining.
This commit remove the profiler entirely from Ryujinx and remove the associated CI tasks.
* Allow launching with custom data directories
Don't load alternate keys when using custom directory
* Address gdkchan's comments
* Misc fixes to log levels
Added more enabled log levels by default
Moved successful config updation to Notice as
1. It's not a warning
2. Warnings could've been disabled by the config load and hence message
would be lost
* Initial commit
Enable proper LED patterns
Toggle Hotkeys only on focus
Ignore Handheld on Docked mode
Remove PrimaryController
Validate NpadIdType
Rewrite NpadDevices to process config in update loop
Cleanup
* Notify in log periodically when no matched controllers
* Remove duplicate StructArrayHelpers in favor of Common.Memory
Fix struct padding CS0169 warns in Touchscreen
* Remove GTK markup from Controller Applet
Use IList instead of List
Explicit list capacity in 1ms loop
Fix formatting
* Restrict ControllerWindow to show valid controller types
Add selected player name to ControllerWindow title
* ControllerWindow: Fix controller type initial value
NpadDevices: Simplify default battery charge
* Address AcK's comments
Use explicit types and fix formatting
* Remove HashSet for SupportedPlayers
Fixes potential exceptions due to race
* Fix ControllerSupportArg struct packing
Also comes with two revisions of struct for 4/8 players max.
* Amadeus: Final Act
This is my requiem, I present to you Amadeus, a complete reimplementation of the Audio Renderer!
This reimplementation is based on my reversing of every version of the audio system module that I carried for the past 10 months.
This supports every revision (at the time of writing REV1 to REV8 included) and all features proposed by the Audio Renderer on real hardware.
Because this component could be used outside an emulation context, and to avoid possible "inspirations" not crediting the project, I decided to license the Ryujinx.Audio.Renderer project under LGPLv3.
- FE3H voices in videos and chapter intro are not present.
- Games that use two audio renderer **at the same time** are probably going to have issues right now **until we rewrite the audio output interface** (Crash Team Racing is the only known game to use two renderer at the same time).
- Persona 5 Scrambler now goes ingame but audio is garbage. This is caused by the fact that the game engine is syncing audio and video in a really aggressive way. This will disappears the day this game run at full speed.
* Make timing more precise when sleeping on Windows
Improve precision to a 1ms resolution on Windows NT based OS.
This is used to avoid having totally erratic timings and unify all
Windows users to the same resolution.
NOTE: This is only active when emulation is running.
* Logger class changes only
Now compile-time checking is possible with the help of Nullable Value
types.
* Misc formatting
* Manual optimizations
PrintGuestLog
PrintGuestStackTrace
Surfaceflinger DequeueBuffer
* Reduce SendVibrationXX log level to Debug
* Add Notice log level
This level is always enabled and used to print system info, etc...
Also, rewrite LogColor to switch expression as colors are static
* Unify unhandled exception event handlers
* Print enabled LogLevels during init
* Re-add App Exit disposes in proper order
nit: switch case spacing
* Revert PrintGuestStackTrace to Info logs due to #1407
PrintGuestStackTrace is now called in some critical error handlers
so revert to old behavior as KThread isn't part of Guest.
* Batch replace Logger statements
* Implement SwKbd GUI
* Relocate UI handler to Emu Context from Config
Also create a common interface for UI handlers in the context and specialize for Gtk
Add basic input length validation in InputDialog
* Add Transfer Memory support to AppletCreator
Read Initial Text for SwKbd using Transfer Memory
* Improve InputDialog widget
Improve length validation
Has extra label to show validition info
Handle potential errors and log them
* Misc improvements
* Improve string validation
* Improve error handling
* Remove tuple in struct
* Address formatting nits
* Add proper Cancel functionality
Also handle GUI errors in UI handler
* Address jD's comments
* Fix _uiHandler init
* Address AcK's comments
* Detect available audio backends in the gui on a separate thread and
hardcode dummy backend in the dropdown and select it by default
* Use a Task rather than a Thread
* Modify UI on UI thread
* Implement Modding Support
* Executables: Rewrite to use contiguous mem and Spans
* Reorder ExeFs, Npdm, ControlData and SaveData calls
After discussion with gdkchan, it was decided it's best to call
LoadExeFs after all other loads are done as it starts the guest process.
* Build RomFs manually instead of Layering FS
Layered FS approach has considerable latency when building the final
romfs. So, we manually replace files in a single romfs instance.
* Add RomFs modding via storage file
* Fix and cleanup MemPatch
* Add dynamically loaded NRO patching
* Support exefs file replacement
* Rewrite ModLoader to use mods-search architecture
* Disable PPTC when exefs patches are detected
Disable PPTC on exefs replacements too
* Rewrite ModLoader, again
* Increased maintainability and matches Atmosphere closely
* Creates base mods structure if it doesn't exist
* Add Exefs partition replacement
* IPSwitch: Fix nsobid parsing
* Move mod logs to new LogClass
* Allow custom suffixes to title dirs again
* Address nits
* Add a per-App "Open Mods Directory" context menu item
Creates the path if not present.
* Normalize tooltips verbiage
* Use LocalStorage and remove unused namespaces
* Initial implementation of Render Target Scaling
Works with most games I have. No GUI option right now, it is hardcoded.
Missing handling for texelFetch operation.
* Realtime Configuration, refactoring.
* texelFetch scaling on fragment shader (WIP)
* Improve Shader-Side changes.
* Fix potential crash when no color/depth bound
* Workaround random uses of textures in compute.
This was blacklisting textures in a few games despite causing no bugs. Will eventually add full support so this doesn't break anything.
* Fix scales oscillating when changing between non-native scales.
* Scaled textures on compute, cleanup, lazier uniform update.
* Cleanup.
* Fix stupidity
* Address Thog Feedback.
* Cover most of GDK's feedback (two comments remain)
* Fix bad rename
* Move IsDepthStencil to FormatExtensions, add docs.
* Fix default config, square texture detection.
* Three final fixes:
- Nearest copy when texture is integer format.
- Texture2D -> Texture3D copy correctly blacklists the texture before trying an unscaled copy (caused driver error)
- Discount small textures.
* Remove scale threshold.
Not needed right now - we'll see if we run into problems.
* All CPU modification blacklists scale.
* Fix comment.
* Implement audio backend configuration option
* Use OpenAL by default
* Increment version number in config.json
and add 30px to the height of the settings window
* nits
* capitalise audio backend names
* GameTableContextMenu: Implemented options for PPTC
Added an option for purging the cache and for opening the PPTC directory.
* Fixed formating and used a better naming scheme for some of the variables.
* Fixed some nits
* Fixed more nits
* Rearranged the context menu and fixed some nits
* Addressed LDj's review
* SettingsWindow: Add the ability to choose multiple game directories in one go
* Adressed emmauss's suggestion
* Simplified the check for duplicate game directories
As per Xpl0itr's and emmauss's suggestion, I simplified the loop that checks if the selected game directories are already added.
* Fixed a nit
* Separate hotkey settings from emulated input settings
* Remember gui column sort
* nit
* fix schema
* nit
* Remove unused SaveDataPath to speed up game list loading
* Reset the vertical scrollbar to the top when titles finish loading
* Delete DelegateTypes.cs
* Delete DelegateCache.cs
* Add files via upload
* Update Horizon.cs
* Update Program.cs
* Update MainWindow.cs
* Update Aot.cs
* Update RelocEntry.cs
* Update Translator.cs
* Update MemoryManager.cs
* Update InstEmitMemoryHelper.cs
* Update Delegates.cs
* Nit.
* Nit.
* Nit.
* 10 fewer MSIL bytes for us
* Add comment. Nits.
* Update Translator.cs
* Update Aot.cs
* Nits.
* Opt..
* Opt..
* Opt..
* Opt..
* Allow to change compression level.
* Update MemoryManager.cs
* Update Translator.cs
* Manage corner cases during the save phase. Nits.
* Update Aot.cs
* Translator response tweak for Aot disabled. Nit.
* Nit.
* Nits.
* Create DelegateHelpers.cs
* Update Delegates.cs
* Nit.
* Nit.
* Nits.
* Fix due to #784.
* Fixes due to #757 & #841.
* Fix due to #846.
* Fix due to #847.
* Use MethodInfo for managed method calls.
Use IR methods instead of managed methods about Max/Min (S/U).
Follow-ups & Nits.
* Add missing exception messages.
Reintroduce slow path for Fmov_Vi.
Implement slow path for Fmov_Si.
* Switch to the new folder structure.
Nits.
* Impl. index-based relocation information. Impl. cache file version field.
* Nit.
* Address gdkchan comments.
Mainly:
- fixed cache file corruption issue on exit; - exposed a way to disable AOT on the GUI.
* Address AcK77 comment.
* Address Thealexbarney, jduncanator & emmauss comments.
Header magic, CpuId (FI) & Aot -> Ptc.
* Adaptation to the new application reloading system.
Improvements to the call system of managed methods.
Follow-ups.
Nits.
* Get the same boot times as on master when PTC is disabled.
* Profiled Aot.
* A32 support (#897).
* #975 support (1 of 2).
* #975 support (2 of 2).
* Rebase fix & nits.
* Some fixes and nits (still one bug left).
* One fix & nits.
* Tests fix (by gdk) & nits.
* Support translations not only in high quality and rejit.
Nits.
* Added possibility to skip translations and continue execution, using `ESC` key.
* Update SettingsWindow.cs
* Update GLRenderer.cs
* Update Ptc.cs
* Disabled Profiled PTC by default as requested in the past by gdk.
* Fix rejit bug. Increased number of parallel translations. Add stack unwinding stuffs support (1 of 2).
Nits.
* Add stack unwinding stuffs support (2 of 2). Tuned number of parallel translations.
* Restored the ability to assemble jumps with 8-bit offset when Profiled PTC is disabled or during profiling.
Modifications due to rebase.
Nits.
* Limited profiling of the functions to be translated to the addresses belonging to the range of static objects only.
* Nits.
* Nits.
* Update Delegates.cs
* Nit.
* Update InstEmitSimdArithmetic.cs
* Address riperiperi comments.
* Fixed the issue of unjustifiably longer boot times at the second boot than at the first boot, measured at the same time or reference point and with the same number of translated functions.
* Implemented a simple redundant load/save mechanism.
Halved the value of Decoder.MaxInstsPerFunction more appropriate for the current performance of the Translator.
Replaced by Logger.PrintError to Logger.PrintDebug in TexturePool.cs about the supposed invalid texture format to avoid the spawn of the log.
Nits.
* Nit.
Improved Logger.PrintError in TexturePool.cs to avoid log spawn.
Added missing code for FZ handling (in output) for fp max/min instructions (slow paths).
* Add configuration migration for PTC
Co-authored-by: Thog <me@thog.eu>
This remove Utf8son and JsonPrettyPrinter dependencies.
NOTE: the standard JSON parser doesn't support configurable
indentation, as a result, all the pretty printed JSON are indented with 2
spaces.
As I was unable to disable the ctrl + f keybinding, this implement
something to make it works with the default GTK code logic.
Also remove unused _treeView static member.
* Rewrite SurfaceFlinger
Reimplement accurately SurfaceFlinger (based on my 8.1.0 reversing of it)
TODO: support swap interval properly and reintroduce disabled "game vsync" support.
* Some fixes for SetBufferCount
* uncomment a test from last commit
* SurfaceFlinger: don't free the graphic buffer in SetBufferCount
* SurfaceFlinger: Implement swap interval correctly
* SurfaceFlinger: Reintegrate Game VSync toggle
* SurfaceFlinger: do not push a fence on buffer release on the consumer side
* Revert "SurfaceFlinger: do not push a fence on buffer release on the consumer side"
This reverts commit 586b52b0bfab2d11f361f4b59ab7b7141020bbad.
* Make the game vsync toggle work dynamically again
* Unregister producer's Binder object when closing layer
* Address ripinperi's comments
* Add a timeout on syncpoint wait operation
Syncpoint aren't supposed to be waited on for more than a second.
This effectively workaround issues caused by not having a channel
scheduling in place yet.
PS: Also introduce Android WaitForever warning about fence being not
signaled for 3s
* Fix a print of previous commit
* Address Ac_K's comments
* Address gdkchan's comments
* Address final comments
* libhac: use ApplicationControlProperty instead of Nacp
Nacp was marked as deprecated in 0.10.0, this PR remove all usage of it
from Ryujinx and use the new struct ApplicationControlProperty.
* Address Moose's comment
* Delete old HLE.Input
* Add new HLE Input.
git shows Hid.cs as modified because of the same name. It is new.
* Change HID Service
* Change Ryujinx UI to reflect new Input
* Add basic ControllerApplet
* Add DebugPad
Should fix Kirby Star Allies
* Address Ac_K's comments
* Moved all of HLE.Input to Services.Hid
* Separated all structs and enums each to a file
* Removed vars
* Made some naming changes to align with switchbrew
* Added official joycon colors
As an aside, fixed a mistake in touchscreen headers and added checks to
important SharedMem structs at init time.
* Further address Ac_K's comments
* Addressed gdkchan's and some more Ac_K's comments
* Address AcK's review comments
* Address AcK's second review comments
* Replace missed Marshal.SizeOf and address gdkchan's comments
* Add warning and option to disable when loading game with debug logs
* Add warning and option to disable when shader dumping is enabled
* Edit text and add title
* Add a dialog to make sure user wants to stop emulation when esc is pressed
* Remove unneccesary space
* Fix formatting
* Remove unnessecary spaces
* Fix formatting for member of GtkDialog
* Fix unhandled UnauthorizedAccessException causing crash while listing directories
* Actually handle not having privileges for a directory
* Fix log message when not having privileges for a directory
* Remove unneccesary empty lines
* Remove unneccecssary space
This implement `GetRegionCode` accordingly to RE. I've added a setting in the GUI and a field in the Configuration file with a way to update the Configuration file if needed.
* Move status information from the title bar to the new status bar
* jd's requested changes
* Ack's requested changes
* gdk's requested changes
* Remove frame time statistics
* config loading changes
- load config from either ryufs or ryujinx.exe parent folder with parent folder taking priority
- config file in repo is only copied to parent directory if built in debug mode
* AcK's requested changes
* add "Profile Debug" as a condition to copy the default config to output
This add the AppVeyor build version (added in #927) in the console window title and in the GUI title (when you are on the games list or when an emulated game is closed).
* Some fixes for the new GLRenderer
Changelog:
- Fix transparency of the window on some games on Windows.
- Fix escape key not being able to exit emulation.
- Fix inverted logic in fullscreen event handling.
- Fix a race condition when stoping emulation causing a hang.
- Fix a memory leak of the OpenGL context when stoping emulation (saving ~200MB of RAM when stoping emulation).
- Simplify and document behaviours when exiting the emulator while the
emulation is running.
* Make sure to clear alpha channel when presenting Texture
This fix once and for all the transparency issue on Windows.
* Enforce footer bar size to avoid gl widget to get resized to 1280x724
* Fix full screen inversion in MainWindow and make sure _listStatusBox don't come back when not needed
* Remove previous transparency clear attempt that is useless now
* Remove an extra line return
* add gl rendering widget
* embed renderer into main window
* add input
* fix mouse input
* fix mouse coords
* refresh game list after closing game, remove profiler method
* rebase, hide game list progress bar while game is running
* Some bug fixes
Changelog:
- Reapply some changes that got lost while rebasing from #904
- Make sure to guarantee exclusivity on the GL context (fixing multiple
possible race conditions on Windows)
- Avoid making GLRenderer disposed multiple time
* add fullscreen, enable input on focus, disable aplha
* addressed comments
* Disable transparency in the window
* fix fullscreen state, fix focus, addressed comments
* nit
* addressed nit
Co-authored-by: Thog <thog@protonmail.com>
* Implement NCA section extractors in the GUI
* AcK's requested changes
* Put extractor on a new thread and added dialogs
* bug fix
* make extraction cancelable
* nits
* changes
* gdkchan's requested change
* Fix a crash when closing the main Ui
Also make sure to dispose the OpenAL context to not leak memory when
unloading the emulation context.
* Improve keys and 'game already running' dialogs
* Make sure to dispose the page table and ThreadContext
Less memory leaks!
* Fix tests
* Address gdk's comments
* Fix application list
* Convert file extensions to lowercase before comparing
* AcK's requested changes
* fixed bug found by gdkchan's requested changes
* Account for mismatch between LibHac.TitleLanguage and ...System.Language
* Keep the GUI alive when closing a game
Make HLE.Switch init when starting a game and dispose it when closing
the GlScreen.
This also make HLE in charge of disposing the audio and gpu backend.
* Address Ac_k's comments
* Make sure to dispose the Discord module and use GTK quit method
Also update Discord Precense when closing a game.
* Make sure to dispose MainWindow
* Address gdk's comments
* Update to LibHac 0.8.2
This brings support for temporary savedata, ignores case in key names when loading from a file, and prints the rights ID correctly when missing a title key.
* Auto-format IFileSystemProxy
* firmware installer
* Add directory installation option and fix 9.x support for directory
* Fix missing system font error while installing for the first time
* Address code style comments
* Create and use InvalidFirmwarePackageException
* Fix LDj3SNuD's comments
* addressed alex's comments
* add label to status bar to show current firmware version
Co-authored-by: Thog <thog@protonmail.com>
* Use savedata FS commands from LibHac
* Add EnsureSaveData. Use ApplicationControlProperty struct
* Add a function to migrate to the new directory layout
* LibHac update
* Change backup structure
* Don't create UI files in the save path
* Update RyuFs paths
* Add GetProgramIndexForAccessLog
Ryujinx only runs one program at a time, so always return values reflecting that
* Load control NCA when loading from an NSP
* Skip over UI stats when exiting
* Set TitleName and TitleId in more cases. Fix TitleID naming style
* Completely comment out GUI play stats code
* rebase
* Update LibHac
* Update LibHac
* Revert UI changes
* Do migration automatically at startup
* Rename RyuFs directory to Ryujinx
* Update RyuFs text
* Store savedata paths in the GUI
* Make "Open Save Directory" work
* Use a dummy NACP in EnsureSaveData if one is not loaded
* Remove manual migration button
* Respond to feedback
* Don't read the installer config to get a version string
* Delete nuget.config
* Exclude 'sdcard' and 'bis' during migration
Co-authored-by: Thog <thog@protonmail.com>
* Add context menu to the game table
* Minor bugfix and cleanup
* add ability to create directory if it doesn't exist
* nit
* dont show menu when right-clicking nothing
The configuration system was quite fragile and too dependent on everything, this fix#812 .
The changes:
The file configuration is now entirely independent from the internal configuration state.
The file configuration is versioned (current version is 1).
Every configuration elements are now reactive properties that the emulator can register on to handle initialization and configuration changes.
The configuration system is now in Ryujinx.Common to be accessible on every projects.
Discord integration is now independent from the UI and can be reloaded.
The primary controller is now configurable at runtime (NOTE: the UI currently doesn't have any options to configure real controller).
The logger is entirely reloadable.
You can now hotplug your controller when the emulator is running.
The logger now takes name for every LogTarget to make them removable at runtime.
The logger now always add the default "console" target to avoid loosing early init logs.
The configuration system now generates a default file configuration if it's missing or too new.
General system stability improvements to enhance the user's experience
* controller image changes depending on the selected controller type
the new controller image assets are temporary until i get new ones
* Game list scans subdirs for games
* Key file existence check
* Only shows Program NCAs in Application list
* Change shown GUI columns without restarting
* Sort by column if you click on the column header
Columns are sorted as text so there are inaccuracies on some columns
* Fix sort on Time Played, Last Played and File Size columns
* Add ability to designate favourite games #1
TODO:
- Make fav games persistent
- Fix invisible check marks due to theme
* Add ability to designate favourite games #2
Also removed default theme
* Added a Windows specific build condition and a Linux bug fix
* bugfix
* Load metadata from JSONs
* Temp bug fix for MacOS
* lil clean up
* requested changes
* Misc fixes
* edited schema and config
* Show the TitleID of games on the title bar
* gui column config option have names
* Async loading of game list
* bugfix and cleanup
* thog's requested changes
* requested changes and cleanup
still need to fix the gtk seizure
* Fix issue where an ExeFS as a NSP didn't show up in the application list
* Minor fixes
* catch glib unhandled exceptions
* Make sure to do UI manipulation in the main thread
* Print path of invalid files
* Ac_k's requested changes
* Return of the dark theme
* move AboutInfo struct to another file
* sort usings
* changes
- gdkchan's requested changes that have been marked resolved
- made some structs internal as they aren't used outside of the GUI
- renamed Ryujinx.UI to Ryujinx.Ui to fit naming convention and folder structure
- fixed bug where controller type dropdown box is stretched
* Update to LibHac 0.6.0
* Create an IFileSystemProxy object from LibHac
* Rename rc -> result
* Alignment and spacing
* Result formatting
* Spacing
* Sort usings
* Added GUI to Ryujinx
* Updated to use Glade
Also added scrollbar and default dark theme
* Added support for loading icon from .nro files and cleaned up the code a bit
* Added General Settings Menu (read-only for now) and moved some functionality from MainMenu.cs to ApplicationLibrary.cs
* Added custom GUI theme support and changed the defualt theme to one I just wrote
* Added GTK to process path, fixed a bug and minor edits
* some more edits and a bug fix
* general settings menu is now fully functional. also fixed the bug where ryujinx crashes when it trys to load an invalid gamedir
* big rewrite
* aesthetic changes to General Settings menu
* Added Control Settings
one day done feature :P
* minor changes
* 1st wave of changes
* 2nd wave of changes
* 3rd wave of changes
* Cleanup settings ui
* minor edits
* new about window added, still needs styling
* added spin button for new option and tooltips to settings
* Game icons and names are now shown in the games list
* add nuget package which contains gtk dependencies
* requested changes have been changed
* put CreateGameWindow on a new thread and stopped destroying the main menu when a game loads
* fixed bug that allowed a user to attempt to load multiple games at a time which causes a crash
* Added LastPlayed and TimePlayed columns to the game list
* Did some testing and fixed some bugs
Im not happy with one of the fixes so i will do it properly an upcoming commit
* did some more bug testing and fixed another 2 bugs
* caught an exception when ryujinx tries to load non-homebrew as homebrew
* Large changes
Rewrote ApplicationLibrary.cs (added comments too) so any devs reading it wont get eye cancer, also its probably more efficient now. Added 2 new columns (Developer name and application version) to the game list and wrote the logic for it. Ryujinx now loads NRO's TitleName and TitleID from the NACP file instead of the default NPDM. I also killed a lot of bugs
* Moved Files
moved ApplicationLibrary.cs to Ryujinx.HLE as that is a better place for it. Moved contents of GUI folder to Ui folder and changed the namespaces of the gui files from Ryujinx to Ryujinx.Ui
* Added 'Open Ryujinx Folder' button to the file menu and did some small fixes
* New features
* updated nuget package with missing dlls and changed emmauss' requested changes
* fixed some minor issues
* all requested changes marked as resolved have been changed
* gdkchan's requested changes
* fixed an issue with settings window getting chopped on small res
* fixed 2 problems caused by rebase
* changed the default theme
* applied Thog's patch to fix issue on linux
* fixed issue caused by rebase
* added update check button that runs ryujinx-updater
* reads version info from installer and displays it in about menu
* changes completed
* requested changes changed
* fixed issue with default theme
* fixed a bug and completed requested changes
* added more tooltips and changed some text
* Fix typos
* Remove unneeded using statements
* Enforce var style more
* Remove redundant qualifiers
* Fix some indentation
* Disable naming warnings on files with external enum names
* Fix build
* Mass find & replace for comments with no spacing
* Standardize todo capitalization and for/if spacing
* Profiler initial setup
* Capture actual timing data
* Profiling data dumped to file on close
* Support for multiple sessions under the same name
* Service profiling
* Sort output for easier read
* csv output
* Split session into 2 seperate values
* Refactor name to category
* Basic profiling window dummy. Toggle with F1 or set key with config
No actual data displayed yet, just a pretty triangle
* Simple font rendering
* Display some actual timing data
* Fix font bearing being ignored
* x bearing and advance. Fixed y bearing calc
* Different coloured lines to make reading easier
* Scrolling
* Multiple columns for name
* Column titles
* display in ms rather than ticks
* Bars to display times
* Sortable columns
* Regex filtering
* Better instant timing calculation
Fixed minor regex bug
* Better filtering
Better max value calculation
Skip some rendering to reduce profiler weight
* Variable update rate
* Show/hide inactive button
Some other touchups
* Add missing project reference
* Hide inactive and pause
* Fix viewport errors
* Update initial window position
* Variable name cleanup
* Disable timing dump by default
* Internal Profile refactor and cleanup
* Timing info cleanup
* Profile config cleanup
* Settings cleanup
* Button refactor
* Profile refactor
* Profile window cleanup
* Window manager refactor
* Font service cleanup
* Fixed bug in profiling method where method was called twice without profiling enabled
* Allow update rates of less than 1hz
* Stop using window.run because it's apparently not great for performance.
Some other performance things, should only draw a new frame when something has changed
* Improved time tracking to keep history
* Profile window was getting too long so I added regions and split bar rendering out into partial class
* Dummy graph view with button to toggle
* Realtime graphing initial commit
* Display totals on new bar
* Simple zooming support with arrow keys
* Limit graph zoom and label start and stop
* Added support for timing flags
* Stop data running away when paused and frame updated
* Manual step button
* Update at when flag issued (ie every frame)
* Removed useless finish profiling call
* Enable and disable profiling at compile time.
* Better plage for frame swap flag, also kept enough flags to cover larger time spans
* No more stopwatches created, uses PerformanceCounter now
* public and internal fields to props
* Move visible update to update rather than draw as it causes a lockup if called from draw
Also added profile window disposal so closing main window closes profiler too
* Fixed optimization settings for profiled builds
* Appveyer script guess to add profiling builds
* Quotes
* 1 less quote
* Maybe escape space?
* Specify config
* Different approach
* Fix file paths
* Fix another path
* Better artifact naming
* Missing -
* test string
* Removed for, to test
* readd for
* moved dashes around so artifacts can begin with letters
* quote env vars
* martix
* Removed configs
* Much more efficient capture, ConcurrentDictionary was causing too much overhead
* Skip repeating pixels during draw
* Stop ram usage getting too high. Compensating for cleanup doing more now
* Profile CPU, execute skipped because it's just too much work
* Fixed bug with skipping draws. Furthest needed to be reset every loop
* Less distracting colour for timing flags
* Removed profile method function. It just doesn't play nice with conditional compilation so best to remove it now before it's used a lot
* Null check for category, group and item
* Forgot to reset instant count/time
* Increment line when blank
* Fix threading conflict
Fixed instant count and time. Now accuratly represents the total time and count in the buffer
* Fixed bug in time rendering where times were being trimmed to an int.
Also added microsecond/millisecond formatting to reduce the number of decimal places needed
* Support for multiple profiling levels
* Sometimes it would have to wait a long time for lock to clear so moved it to a tryenter and skip if already locked
* Dumb bug regarding clearing of timestamps. Start is already removed so no need to add it to the start
* Optimisations in drawing routine:
Only calculate bar top and bottom once per bar rather than once per timestamp
Pre-calculate the right side of the graph as it was being calculated multiple times per bar
Skip rendering timestamps that occupy the same pixel space now uses the raw timestamp to decide. While technically not as accurate it's much easier as the right side of the bar doesn't have to be calculated for a skipped timestamp
* Couple alignment changes
* Custom equals overload for profile config. The default implpmentation was just too slow
* Bump cleanup thread priority. It clears the timer queue so it need to be run frequently
* Fixed bug with scrolling caused by recent rendering optimisations. Simply forgot to increment the line index on a skipped line
* Stopped blocking memory disposal so much. Also parralised(?) cleanup call
* Uses Arial for font.
* Enable AA
* Inital seperated config support
* Fix profile input from keyboard
* Check toggle visible key from profiler
* Can't use conditional here as _profileWindow doesn't exist it non-profiling build
* Removed junk from merge in sln
* Fromatting cleanup for review
* Fiked small bug caused by race condition
* Added multiple flags with colours
Added way to set max flags
* Fixed flag times
Dispays time flags in window
* Colors for text frame times
* enable and disable flags button added
better fix for race crash
* Re factored npad out
* Explicitly specified type in foreach
* Removed extra line
* Added s to fix nit
* Comment to clarify default time
* Another s nit
* Ordering nit
* Uses Interlocked.Increment over lock
* Unindented #if's and #regions
* Comment to clarify these are indexes in the list
* Uses iequatable over override equals to avoid conversion and checks at runtime
* Removed no longer used variable
* Logging: Refactor log targets into Ryujinx.Common
* Logger: Implement JSON Log Target
* Logger: Optimize Console/File logging targets
Implement a simple ObjectPool to pool up StringBuilders to avoid causing excessive GCing of gen1/2 items when large amounts of log entries are being generated.
We can also pre-determine the async overflow action at initialization time, allowing for an easy optimization in the message enqueue function, avoiding a number of comparisons.
* Logger: Implement LogFormatters
* Config: Refactor configuration file and loading
* Config: Rename to .jsonc to avoid highlighting issues in VSC and GitHub
* Resolve style nits
* Config: Resolve incorrect default key binding
* Config: Also update key binding default in schema
* Tidy up namespace imports
* Config: Update CONFIG.md to reflect new Config file
* Refactor Ryujinx.Common and HLE Stub Logging
* Resolve review comments
* Rename missed loop variable
* Optimize PrintStub logging function
* Pass the call-sites Thread ID through to the logger
* Remove superfluous lock from ConsoleLog
* Process logged data objects in the logger target
Pass the data object all the way to the output logger targets, to allow them to "serialize" this in whatever appropriate format they're logging in.
* Use existing StringBuilder to build the properties string
* Add a ServiceNotImplemented Exception
Useful for printing debug information about unimplemented service calls
* Resolve Style Nits
* Resolve Merge Issues
* Fix typo and align declarations
* Initial implementation of KProcess
* Some improvements to the memory manager, implement back guest stack trace printing
* Better GetInfo implementation, improve checking in some places with information from process capabilities
* Allow the cpu to read/write from the correct memory locations for accesses crossing a page boundary
* Change long -> ulong for address/size on memory related methods to avoid unnecessary casts
* Attempt at implementing ldr:ro with new KProcess
* Allow BSS with size 0 on ldr:ro
* Add checking for memory block slab heap usage, return errors if full, exit gracefully
* Use KMemoryBlockSize const from KMemoryManager
* Allow all methods to read from non-contiguous locations
* Fix for TransactParcelAuto
* Address PR feedback, additionally fix some small issues related to the KIP loader and implement SVCs GetProcessId, GetProcessList, GetSystemInfo, CreatePort and ManageNamedPort
* Fix wrong check for source pages count from page list on MapPhysicalMemory
* Fix some issues with UnloadNro on ldr:ro
* Audio: Implement libsoundio as an alternative audio backend
libsoundio will be preferred over OpenAL if it is available on the machine. If neither are available, it will fallback to a dummy audio renderer that outputs no sound.
* Audio: Fix SoundIoRingBuffer documentation
* Audio: Unroll and optimize the audio write callback
Copying one sample at a time is slow, this unrolls the most common audio channel layouts and manually copies the bytes between source and destination. This is over 2x faster than calling CopyBlockUnaligned every sample.
* Audio: Optimize the write callback further
This dramatically reduces the audio buffer copy time. When the sample size is one of handled sample sizes the buffer copy operation is almost 10x faster than CopyBlockAligned.
This works by copying full samples at a time, rather than the individual bytes that make up the sample. This allows for 2x or 4x faster copy operations depending on sample size.
* Audio: Fix typo in Stereo write callback
* Audio: Fix Surround (5.1) audio write callback
* Audio: Update Documentation
* Audio: Use built-in Unsafe.SizeOf<T>()
Built-in `SizeOf<T>()` is 10x faster than our `TypeSize<T>` helper. This also helps reduce code surface area.
* Audio: Keep fixed buffer style consistent
* Audio: Address styling nits
* Audio: More style nits
* Audio: Add additional documentation
* Audio: Move libsoundio bindings internal
As per discussion, moving the libsoundio native bindings into Ryujinx.Audio
* Audio: Bump Target Framework back up to .NET Core 2.1
* Audio: Remove voice mixing optimizations.
Leaves Saturation optimizations in place.
* Change naming convention for Ryujinx project
* Change naming convention for ChocolArm64 project
* Fix NaN
* Remove unneeded this. from Ryujinx project
* Adjust naming from new PRs
* Name changes based on feedback
* How did this get removed?
* Rebasing fix
* Change FP enum case
* Remove prefix from ChocolArm64 classes - Part 1
* Remove prefix from ChocolArm64 classes - Part 2
* Fix alignment from last commit's renaming
* Rename namespaces
* Rename stragglers
* Fix alignment
* Rename OpCode class
* Missed a few
* Adjust alignment
* support reading control data
* show game info on titlebar
* use first language is default is not available
* use seperate language enums for titles
* fix hex display
* Initial Framerate limit implementation
* use seperate event for limiter
* check for vsync signal after queue up framebuffer
* removed ingame toggle
* fix nits
* Move GPU LLE emulation from HLE to Graphics
* Graphics: Move Gal/Texture to Texture
* Remove Engines/ directory and namespace
* Use tables for image formats
* Abstract OpCode decoding
* Simplify image table
* Do not leak Read* symbols in TextureReader
* Fixups
* Rename IGalFrameBuffer -> IGalRenderTarget
* Remove MaxBpp hardcoded value
* Change yet again texture data and add G8R8 flipping
* Rename GalFrameBufferFormat to GalSurfaceFormat
* Unident EnsureSetup in ImageHandler
* Add IsCompressed
* Address some feedback
* Logging: Asynchronously log messages to the Console window
Writing to the Console blocks until the write completes. This has the potential to block any code path that logs to the application logger.
By queuing up log messages in an asynchronous queue and returning without blocking, we can speed up code paths that heavily log to the console (for example stubbed services like ServiceHid).
From testing this results in a roughly 8% time decrease between Ryujinx startup and the splash screen in Super Mario Odyssey on my system - 00:03:19.591 down to
00:03:04.354. Depending on your system, YMMV.
* Logging: Resolve code styling issues
* Some style fixes and nits on ITimeZoneService
* Remove some unneeded usings
* Remove the Ryujinx.HLE.OsHle.Handles namespace
* Remove hbmenu automatic load on process exit
* Rename Ns to Device, rename Os to System, rename SystemState to State
* Move Exceptions and Utilities out of OsHle
* Rename OsHle to HOS
* Rename OsHle folder to HOS
* IManagerDisplayService and ISystemDisplayService style fixes
* BsdError shouldn't be public
* Add a empty new line before using static
* Remove unused file
* Some style fixes on NPDM
* Exit gracefully when the application is closed
* Code style fixes on IGeneralService
* Add 0x prefix on values printed as hex
* Small improvements on finalization code
* Move ProcessId and ThreadId out of AThreadState
* Rename VFs to FileSystem
* FsAccessHeader shouldn't be public. Also fix file names casing
* More case changes on NPDM
* Remove unused files
* Move using to the correct place on NPDM
* Use properties on KernelAccessControlMmio
* Address PR feedback
This commit implements the argv config key in Ryujinx (by creating a temporary copy of the homebrew executable in the sdmc VFS) to make it possible
to load libnx's "romfs" files.
This commit also call Os.Dispose in Ns.OnFinish to dispose all resources when exiting
* Loop GLScreen with custom method
* Fix deadlocks
* Fix screen resizing
* Change event to bool
* Try to fix quitting error
* Set title from main thread
* Queue max 1 vsync, fix high FPS after a slowdown
* Added Basic Controller Support
* Added Extra Configuration Options
Added a GamePad_Enable option and GamePad_Index option
* Revert "Added Extra Configuration Options"
This reverts commit 6cc56bfe7e.
* Revert "Revert "Added Extra Configuration Options""
This reverts commit 4809e5effe.
* Forgot to change the Gamepad Index
* Added Configuration for the A B X Y Buttons
* Added Button Configuration for all other Buttons
* Added Basic Joystick Configuration
* Fixed Joystick Axis Problems
Fixed Joystick Axis Problems when switching around the Joysticks (Left Stick is Right and Right stick is Left)
* Refactored all of the button mapping code
* Changes in compliance with review
* Changes in compliance with review
* Fixed problems in the configuration file with different regions
* Changes in compliance with review
* Call OpenGL functions directly, remove the pfifo thread, some refactoring
* Fix PerformanceStatistics calculating the wrong host fps, remove wait event on PFIFO as this wasn't exactly was causing the freezes (may replace with an exception later)
* Organized the Gpu folder a bit more, renamed a few things, address PR feedback
* Make PerformanceStatistics thread safe
* Remove unused constant
* Use unlimited update rate for better pref
* Add support for events, move concept of domains to IpcService
* Support waiting for KThread, remove some test code, other tweaks
* Use move handle on NIFM since I can't test that now, it's better to leave it how it was
* implement basic frame time stats
* added game frame time
* made performancestatictics class non-static
* report average framerate instead of current framerate
* Refactor HID, fix issues
* Fix on touch screen code with wrong offset
* Don't use magic values
* Replace more magic values with actual variables, fix touch screen coordinates on different window sizes