diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp index 3656d51de2..8e4ca6acd5 100644 --- a/src/video_core/dma_pusher.cpp +++ b/src/video_core/dma_pusher.cpp @@ -100,10 +100,15 @@ bool DmaPusher::Step() { ProcessCommands(headers); }; if (Settings::IsGPULevelHigh()) { - safe_process(); + if (dma_state.method >= MacroRegistersStart) { + unsafe_process(); + } else { + safe_process(); + } } else { unsafe_process(); } + if (dma_pushbuffer_subindex >= command_list.command_lists.size()) { // We've gone through the current list, remove it from the queue dma_pushbuffer.pop(); @@ -111,6 +116,7 @@ bool DmaPusher::Step() { } else if (command_list.command_lists[dma_pushbuffer_subindex].sync && Settings::values.sync_memory_operations.GetValue()) { signal_sync = true; } + if (signal_sync) { rasterizer->SignalFence([this]() { std::scoped_lock lk(sync_mutex);