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
* 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
* 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
* Better implementation of the DMA pusher, misc fixes
* Remove some debug code
* Correct RGBX8 format
* Add support for linked Texture Sampler Control
* Attempt to fix upside down screen issue
* 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
* 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
* Keep track mapped buffers with fixed offsets
* Started rewriting the memory manager
* Initial support for MapPhysicalMemory and UnmapPhysicalMemory, other tweaks
* MapPhysicalMemory/UnmapPhysicalMemory support, other tweaks
* Rebased
* Optimize the map/unmap physical memory svcs
* Integrate shared font support
* Fix address space reserve alignment
* Some fixes related to gpu memory mapping
* Some cleanup
* Only try uploading const buffers that are really used
* Check if memory region is contiguous
* Rebased
* Add missing count increment on IsRegionModified
* Check for reads/writes outside of the address space, optimize translation with a tail call
* Implement Shared Fonts
This fully implements shared fonts.
This commit is provided without fonts.
This commit also add Size to HSharedMem.Positions to be able to add fonts to shared zones when RequestLoad is called.
* Require the user to provide fonts in RyuFS/system
* Use File.Exits instead of relying ona try/catch and change system resource exception format a bit
* Make sure that font sum doesn't exceed 17MB
Also rename font data dictionary for coherence.
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
* 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