summaryrefslogtreecommitdiff
path: root/src/video_core/dma_pusher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/dma_pusher.cpp')
-rw-r--r--src/video_core/dma_pusher.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp
index 7a82355da..b3e9cb82e 100644
--- a/src/video_core/dma_pusher.cpp
+++ b/src/video_core/dma_pusher.cpp
@@ -77,11 +77,20 @@ bool DmaPusher::Step() {
77 command_headers.resize_destructive(command_list_header.size); 77 command_headers.resize_destructive(command_list_header.size);
78 constexpr u32 MacroRegistersStart = 0xE00; 78 constexpr u32 MacroRegistersStart = 0xE00;
79 if (dma_state.method < MacroRegistersStart) { 79 if (dma_state.method < MacroRegistersStart) {
80 memory_manager.ReadBlock(dma_state.dma_get, command_headers.data(), 80 if (Settings::IsGPULevelHigh()) {
81 command_list_header.size * sizeof(u32)); 81 memory_manager.ReadBlock(dma_state.dma_get, command_headers.data(),
82 command_list_header.size * sizeof(u32));
83 } else {
84 memory_manager.ReadBlockUnsafe(dma_state.dma_get, command_headers.data(),
85 command_list_header.size * sizeof(u32));
86 }
82 } else { 87 } else {
83 memory_manager.ReadBlockUnsafe(dma_state.dma_get, command_headers.data(), 88 const size_t copy_size = command_list_header.size * sizeof(u32);
84 command_list_header.size * sizeof(u32)); 89 if (subchannels[dma_state.subchannel]) {
90 subchannels[dma_state.subchannel]->current_dirty =
91 memory_manager.IsMemoryDirty(dma_state.dma_get, copy_size);
92 }
93 memory_manager.ReadBlockUnsafe(dma_state.dma_get, command_headers.data(), copy_size);
85 } 94 }
86 ProcessCommands(command_headers); 95 ProcessCommands(command_headers);
87 } 96 }