* misc: Implement address space size workarounds
This adds code to support userland with less than 39 bits of address
space available by testing reserving multiple sizes and reducing
guess address space when needed.
This is required for ARM64 support when the kernel is
configured to use 63..39 bits for kernel space.(meaning only 38 bits is available to userland)
* Address comments
* Fix 32 bits address space support and address more comments
* ARMeilleure: Do not hardcode 4KiB page size in JitCache
* test: Do not hardcode page size to 4KiB for Ryujinx.Tests.Memory.Tests
Fix running tests on Asahi Linux with 16KiB pages.
* test: Do not hardcode page size to 4KiB for Ryujinx.Tests.Cpu
Fix running tests on Asahi Linux.
Test runner still crash when trying to run all test suite.
* test: Do not hardcode page size to 4KiB for Ryujinx.Tests.Cpu
Fix somecrashes on Asahi Linux.
* test: Ignore Vshl test on ARM64 due to unicorn crashes
* test: Workaround hardcoded size on some tests
Change mapping of code and data in case of non 4KiB configuration.
* test: Make CpuTestT32Flow depends on code address
Fix failure with different page size.
* test: Disable CpuTestThumb.TestRandomTestCases when page size isn't 4KiB
The test data needs to be reevaluated to take different page size into account.
* Address gdkchan's comments
This is a bare minimal triage action that handle big categories.
In the future we could also label all services correctly but
I didn't felt this was required for a first iteration.
* amadeus: adjust VirtualDevice channel configuration reporting with HardwareDevice
* audio: sdl2: Do not report 5.1 if device doesn't support it
SDL2 5.1 to Stereo conversion is terrible and make everything sound
quiet.
Let's not expose 5.1 if not truly supported by the device.
* amadeus: Allow 5.1 sink output
Also add a simple Stereo to 5.1 change for device sink.
Tested against NES - Nintendo Switch Online that output stereo on the
audio renderer.
* Remove outdated comment
* amadeus: Fix wrong channel mapping check
This was always going to happens, as a result quadratic would break and
move index after the channel count point, effectively breaking
input/output indices.
* amadeus: Fix reverb 3d early delay wrong output index
* time: Update for 15.0.0 changes
Last time we did an upgrade on the time service was during 9.x era, it was about time to take back that reverse again!
15.0.0 added a new structure on the shared memory to get steady clock raw timepoints with a granularity in nanoseconds.
This commit implements this new part.
I plan to write a follow up with a bit of refactoring of this ancient part of the emulator.
As always, reverse and work done by your truly.
PS: As a reminder, if this change is reused anywhere else, work should be credited as Ryujinx and not my person.
* time: Do not set setup value to posix time
This should fix local and network clock returning 0 under usage with
shared memory.
This probably fix#2430.
* Address gdkchan's comment
* Fix internal offset not working since changes and ensure that user clock have a valid clock id
* time: Report auto correcting clock and hardcode steady clock unique id
Fix Pokemon Sword Pokejobs for real.
* Address gdkchan's comment
* vulkan: Move most of the properties enumeration to VulkanPhysicalDevice
That clean up a bit of duplicate logic.
Also move to use an hashset for device extensions.
* vulkan: Move instance querying to VulkanInstance
Also cleanup code to use span when possible instead of unsafe pointers.
* Address gdkchan's comments
* vulkan: Separate debug utils logic from VulkanInitialization
Also checks for VK_EXT_debug_utils existence instead of force enabling it and allow possible error during messenger init
* Address gdkchan's comment
* Use CreateDebugUtilsMessenger Span variant
This allows changing base application directory behavior at build time via FORCE_EXTERNAL_BASE_DIR.
This is intended to be used by nixpkgs and flathub builds.
I also added the missing patch for macOS that we have on macos1 to avoid invalidating code signature.
* vulkan: Respect VK_KHR_portability_subset vertex stride alignment
We were hardcoding alignment to 4, but by specs it can be any values that
is a power of 2.
This also enable VK_KHR_portability_subset if present as per specs
requirements.
* address gdkchan's comment
* Make NeedsVertexBufferAlignment internal
This started as an attempt to remove vkGetPhysicalDeviceMemoryProperties
in FindSuitableMemoryTypeIndex (As this could have some overhead and
shouldn't change at runtime) and turned in a little bigger cleanup.
* vulkan: Enforce Vulkan 1.2+ at instance API level and 1.1+ at device level
This ensure we don't end up trying to initialize with anything currently incompatible.
* Address riperiperi's comment
Because we are building everything on Windows for release at the moment,
git default line ending to CRLF causing issues when packing the
Ryujinx.sh script.
This addresses this by enforcing all files to use LF via .gitattributes.
Avalonia seems to not like when the artifact doesns't match the root namespace...
Address that by moving the binary to "Ryujinx" like we do on macOS build.
* chore: Update tests dependencies
* Apply TSR Berry suggestion to add a GC.SuppressFinalize in MemoryBlock.cs
* Ensure we wait for the test thread to be dead on PartialUnmap
* Use platform attribute for os specific tests
* Make P/Invoke methods private
* Downgrade NUnit3TestAdapter to 4.1.0
* test: Disable warning about platform compat for ThreadLocalMap()
Co-authored-by: TSR Berry <20988865+TSRBerry@users.noreply.github.com>
* haydn: Add support for PCMFloat, PCM32 and PCM8 conversions
This adds support in the compatibility layer for other sample format
than PCM16.
This should help extends compatibility with soundio on devices that
doesn't expose PCM16.
I ommited PCM24 conversion for now as it's not simplest of all.
* Address TSRBerry's comment
* Address comments
* Fix conversion issue and clean up saturation usage
* Revert saturation changes
* Address gdkchan's comment
This fix a warning on "慟哭そして…" by handling correctly the debug mode
flag.
When debug mode isn't enabled, opening /dev/nvhost-dbg-gpu or /dev/nvhost-prof-gpu should fail with a not implemented error code.
This implement this behaviour and also define stubbed interfaces for
completness.
This fixes an error from #3805 that caused a wrong conversion of ``AppKeyValueStorage`` to string.
As that information isn't really relevant without appropriate parsing, it was removed from ``ToString``.
This should get ride of "bell warning" in Mario Kart 8 when entering Time Trials.
This was meant to be only an upgrade of how we set unix permission in
the updater to use .NET 7 new APIs, but I end up finding bugs along the
way.
Changelog:
- Remove direct usage of chmod to use File.SetUnixFileMode.
- Fix command line being broken when updating (#3744) but on
Ryujinx.Ava.
- Makes Ryujinx.Ava updater fallback to Ryujinx executable if current
name isn't found.
- Make permission setter function more generic.
* audio: Rewrite SoundIo bindings
This rewrite SoundIo bindings to be safer and not a pedantic autogenerated mess.
* Address comments
* Switch DllImport to LibraryImport
* Address gdkchan's comment
We only used it in one spot for DPI scaling factor.
This implements the same behaviour using gdiplus.
This remove 700KB of dependency to download and around 170KB unpacked.
* amadeus: Add missing compressor effect from REV11
This was in my reversing notes but seems I completely forgot to
implement it
Also took the opportunity to simplify the Limiter effect a bit.
* Remove some outdated comment
* Address gdkchan's comments
This reverts commit 9677ddaa5d.
SixLabors.ImageShar switched to a shady and vague license starting with 2.x
without mentioning it on their changelog.
As a result we are staying on 1.x (licensed under Apache-2) and will
seak an alternative package.
* amadeus: Allow OOB read of GC-ADPCM coefficients
Fixes "Ninja Gaiden Sigma 2" and possibly "NINJA GAIDEN 3: Razor's Edge"
* amadeus: Fix wrong variable usage in delay effect
We should transform the delay line values, not the input.
* amadeus: Update GroupedBiquadFilterCommand documentation
* amadeus: Simplify PoolMapper alignment checks
* amadeus: Update Surround delay effect matrix to REV11
* amadeus: Add drop parameter support and use 32 bits integers for estimate time
Also implement accurate ExecuteAudioRendererRendering stub.
* Address gdkchan's comments
* Address gdkchan's other comments
* Address gdkchan's comment
* bsd: Fix eventfd broken logic
This commit fix eventfd logic being broken.
The following changes were made:
- EventFd IPC definition had argument inverted
- EventFd events weren't fired correctly
- Poll logic was wrong and unfinished for eventfd
- Reintroduce workaround from #3385 but in a safer way, and spawn 4
threads.
* ipc: Rework a bit for multithreads
* Clean up debug logs
* Make server thread yield when managed lock isn't availaible
* Fix replyTargetHandle not being added in the proper locking scope
* Simplify some scopes
* Address gdkchan's comments
* Revert IPC workaround for now
* Reintroduce the EventFileDescriptor workaround
* common: Make BinaryReaderExtensions Read & Write take unamanged types
This allows us to not rely on Marshal.PtrToStructure and Marshal.StructureToPtr for those.
* common: Make MemoryHelper Read & Write takes unamanged types
* Update Marshal.SizeOf => Unsafe.SizeOf when appropriate and start moving software applet to unmanaged types
For some reasons, my fresh installation of Fedora 36 (KDE) doesn't have a
symlink for libX11.so.
This commit fixes this by trying to import the library with its major
version or fallback to the normal way.
* Update readme to mention .NET 7
* infra: Migrate to .NET 7
.NET 7 is still in preview but this prepare for the release coming up
next month.
* Use Random.Shared in CreateRandom
* Move UInt128Utils.cs to Ryujinx.Common project
* Fix inverted parameters in System.UInt128 constructor
* Fix Visual Studio complains on Ryujinx.Graphics.Vic
* time: Fix missing alignment enforcement in SystemClockContext
Fixes at least Smash
* time: Fix missing alignment enforcement in SteadyClockContext
Fix games (like recent version of Smash) using time shared memory
* Switch to .NET 7.0.100 release
* Enable Tiered PGO
* Ensure CreateId validity requirements are meet when doing random generation
Also enforce correct packing layout for other Mii structures.
This fix a Mario Kart 8 crashes related to the default Miis.
We should report errors even when not requested.
This also ensure we only clear the bits that were requested on the output.
Finally, this fix when input events is 0.
This is a very old oversight on our Poll implementation.
This worked so far reliably because games and homebrews pass the same
buffer as input and output.
This is the first commit of a series of reformat around the codebase as
discussed internally some weeks ago.
This project being one that isn't touched that much, it shouldn't cause
conflict with any opened PRs.
* Ryujinx.Audio: Remove BOM from files
* misc: Relicense Ryujinx.Audio under the terms of the MIT license
With the approvals of all the Ryujinx.Audio contributors, this commit
changes Ryujinx.Audio license from LGPLv3 to MIT.
Because of that PR, TimeZoneRule was bigger than 0x4000 thanks to a
misuse of a constant.
This commit address this issue and add a new unit test to ensure the size of
TimeZoneRule is 0x4000 bytes.
Also address suggestions that were lost on the original PR.
* time: Make TimeZoneRule blittable and avoid copies
This drastically reduce overhead of using TimeZoneRule around the
codebase.
Effect on games is unknown
* Add missing Box type
* Ensure we clean the structure still
This doesn't perform any copies
* Address gdkchan's comments
* Simplify Box
As GitHub sort our builds in an alphanumeric way, we abuse that to fix
both new and old updater behaviour.
This should fix all our issues.
Avalonia updater will be broken between version 1.1.122 to 1.1.126, and
will need manual intervention.
* amadeus: Improve and fix delay effect processing
This rework the delay effect processing by representing calculation with the appropriate matrix and by unrolling some loop in the code.
This allows better optimization by the JIT while making it more readeable.
Also fix a bug in the Surround code path found while looking back at my notes.
* Remove useless GetHashCode
* Address gdkchan's comments