diff options
| author | xbzk <xbzk@eden-emu.dev> | 2026-07-23 21:59:55 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-07-23 21:59:55 +0200 |
| commit | b85f289048fc4ea3636761788e3126ab2e79d591 (patch) | |
| tree | 9b409e5a7646c852142d2ccb29414b0b0a04ba50 /src/video_core/engines/puller.cpp | |
| parent | 89004124a55a5ce8c45a90dcb60afd8a107238c3 (diff) | |
[nce, fs] tico support, fix FS bug that would nuke entire 'switch' folder (#4086)
Contains the minimal set of functionalities to allow tico installer succeed, and tico work normally EXCEPT for game launching (which me or someone else will investigate later)
First three commits are from PR 4012.
The other six, kinda dizzy to explain each one. All were implemented based on tico source, switchbrew and libnx.
Hopefully the commit messages will do.
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4086
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Diffstat (limited to 'src/video_core/engines/puller.cpp')
| -rw-r--r-- | src/video_core/engines/puller.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/video_core/engines/puller.cpp b/src/video_core/engines/puller.cpp index 5816b5901a..0b05d31718 100644 --- a/src/video_core/engines/puller.cpp +++ b/src/video_core/engines/puller.cpp @@ -22,10 +22,21 @@ namespace Tegra::Engines { +namespace { + +constexpr u32 Gf100BindClassMask = 0xffff; +constexpr u32 Gf100BindValidMask = 0x1f0000 | Gf100BindClassMask; + +} // Anonymous namespace + void Puller::ProcessBindMethod(DmaPusher& dma_pusher, const MethodCall& method_call) { - // Bind the current subchannel to the desired engine id. - LOG_DEBUG(HW_GPU, "Binding subchannel {} to engine {}", method_call.subchannel, method_call.argument); - const auto engine_id = static_cast<EngineID>(method_call.argument); + LOG_DEBUG(HW_GPU, "Binding subchannel {} to engine {:#x}", method_call.subchannel, method_call.argument); + u32 engine = method_call.argument; + if ((engine & ~Gf100BindClassMask) != 0 && (engine & ~Gf100BindValidMask) == 0) { + engine &= Gf100BindClassMask; + } + + const auto engine_id = static_cast<EngineID>(engine); bound_engines[method_call.subchannel] = engine_id; switch (engine_id) { case EngineID::FERMI_TWOD_A: |
