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.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp
index eb1371612..13ff64fa3 100644
--- a/src/video_core/dma_pusher.cpp
+++ b/src/video_core/dma_pusher.cpp
@@ -97,6 +97,7 @@ void DmaPusher::ProcessCommands(std::span<const CommandHeader> commands) {
97 if (dma_state.non_incrementing) { 97 if (dma_state.non_incrementing) {
98 const u32 max_write = static_cast<u32>( 98 const u32 max_write = static_cast<u32>(
99 std::min<std::size_t>(index + dma_state.method_count, commands.size()) - index); 99 std::min<std::size_t>(index + dma_state.method_count, commands.size()) - index);
100 dma_state.dma_word_offset = static_cast<u32>(index * sizeof(u32));
100 CallMultiMethod(&command_header.argument, max_write); 101 CallMultiMethod(&command_header.argument, max_write);
101 dma_state.method_count -= max_write; 102 dma_state.method_count -= max_write;
102 dma_state.is_last_call = true; 103 dma_state.is_last_call = true;
@@ -175,7 +176,7 @@ void DmaPusher::CallMultiMethod(const u32* base_start, u32 num_methods) const {
175 dma_state.method_count); 176 dma_state.method_count);
176 } else { 177 } else {
177 auto subchannel = subchannels[dma_state.subchannel]; 178 auto subchannel = subchannels[dma_state.subchannel];
178 subchannel->current_dma_segment = dma_state.dma_get; 179 subchannel->current_dma_segment = dma_state.dma_get + dma_state.dma_word_offset;
179 subchannel->CallMultiMethod(dma_state.method, base_start, num_methods, 180 subchannel->CallMultiMethod(dma_state.method, base_start, num_methods,
180 dma_state.method_count); 181 dma_state.method_count);
181 } 182 }