- Updated the libadrenotools submodule to the latest version.
- Adapted the `adrenotools_open_libvulkan` calls to handle the new function signature.
- Replaced the `adrenotools_gpu_mapping*` argument with a `void**` for user mapping.
- Properly cast `userMappingHandle` to `adrenotools_gpu_mapping*` after loading Vulkan driver.
- Updated related code in `LoadVulkanDriver` to handle the new GPU mapping logic for both custom and built-in Vulkan drivers.
- Ensured backward compatibility with the new feature flags and import handling in the updated API.
* Introduce Jit32 and JitCore32 objects
* Initialize JIT when launching 32bit executables
* Introduce kernel objects for 32bit processes
This commit introduces two new kernel thread types, `KNceThread` and `Jit32Thread`.
`KNceThread`s behave like the previous kernel thread object by setting up thread state and jumping into guest code.
`KJit32Thread`s need to run guest code on a `JitCore32` object, so they perform the necessary state setup and then they also setup the jit core for executing guest code. A loop was introduced because jit execution might return when halted, either for an SVC or for preemption. In those cases the thread needs to wait to be scheduled before executing again.
The process object has also been updated to be able to create 32bit threads when running 32bit processes.
Additionally NCE's ThreadContext has been removed from DeviceState, since a thread is not an NCE thread only anymore, and IPC code has been changed to retrieve the tls region from the thread object.
* Introduce a preemption handler for scheduling with JIT
Scheduler initialization has been delayed until process information is available, as it needs to differentiate between 32bit and 64bit processes.
* Support initializing VMM for 32bit address spaces
* Implement GetThreadContext3 SVC for 32bit processes
* Introduce a thread local pointer to the current guest thread
This also gives easier access to the current guest process structure via the thread structure, just like any kernel does for their internal structures.
* Add a signal handler for JIT threads
* Implement coprocessor 15 accesses
* Implement exclusive memory writes and exclusive monitor
* Enable JIT fastmem
* Enable more JIT optimizations and log exceptions
* Fix incorrect logging call in QueryMemory
* Translate guest virtual addresses on direct accesses from SVCs
* Perform TLS page address translation for direct accesses
This allows the IPC code to work without modifications since `KThread::tlsRegion` now stores a host address that can be accessed directly.
* Add Dynarmic as a submodule
* Revert "Perform TLS page address translation for direct accesses"
This reverts commit 2e25b3f7e4f0687b038fa949648c74e3393da006.
* Revert "Translate guest virtual addresses on direct accesses from SVCs"
This reverts commit 7bec4e0902e6dbb6f06a2efac53a1e2127f44068.
* add an option to change cpu backend
* Fix
---------
Co-authored-by: lynxnb <niccolo.betto@gmail.com>
The yuzu audio_core code is mostly untouched, with a set of wrappers used to bridge it with skyline kernel primitives. Huge thanks to maide and their advice, whom without this wouldn't have been possible.
These are about 100x as expensive on adreno than nvidia due to the lack of a dedicated instruction, since some games work fine without them add a hack to disable them.
Initially this commit was only intended to update LLVM but due to a compilation error on latest LLVM libcxx due to the C++ stdlib header `<algorithm>` being a transitive dependency that is no longer transitively included on the latest LLVM libcxx (as of https://reviews.llvm.org/D119667), this required changes in Skyline and Oboe which were done in https://github.com/google/oboe/pull/1521 and the submodule has been updated to include those changes.