aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/dma_pusher.cpp
diff options
context:
space:
mode:
authorDjihads <76681596+Djihads80@users.noreply.github.com>2026-10-30 16:00:28 +0100
committerGitHub <noreply@github.com>2026-10-30 16:00:28 +0100
commit9e2d8d27a8f8065a74fd3d4eb51efc426bd742f7 (patch)
tree23571ddb1fcf8f2b3cd1b856141cab3f3b756254 /src/video_core/dma_pusher.cpp
parent24e3cb462e47b22edda334939123694ff6920e95 (diff)
parentdfb3241838c17bd0e6c392cc29f24d085185dd73 (diff)
Merge pull request #38 from Djihads80/nx2-accuracy-switch
nx2: Fix the current crash when switching from fast to accurate and vice versa
Diffstat (limited to 'src/video_core/dma_pusher.cpp')
-rw-r--r--src/video_core/dma_pusher.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp
index 62f7e6bfdb..88d571ae5f 100644
--- a/src/video_core/dma_pusher.cpp
+++ b/src/video_core/dma_pusher.cpp
@@ -151,7 +151,10 @@ bool DmaPusher::Step() {
}
}
// A resumed entry is read again: the words after the acquire may be new by now.
- const bool use_safe = Settings::IsDMALevelDefault() ? Settings::IsGPULevelHigh() : Settings::IsDMALevelSafe();
+ // A safe read flushes the caches, which belong to the split's back thread while it runs
+ // (the split only starts with unsafe reads; the settings can change mid-game).
+ const bool use_safe = !VideoCommon::GpuSplit::Get().Active() &&
+ (Settings::IsDMALevelDefault() ? Settings::IsGPULevelHigh() : Settings::IsDMALevelSafe());
if (use_safe) {
Tegra::Memory::GpuGuestMemory<Tegra::CommandHeader, Tegra::Memory::GuestMemoryFlags::SafeRead>headers(memory_manager, dma_state.dma_get, header.size, &command_headers);
const std::span<const CommandHeader> commands{headers.data(), headers.size()};