diff options
Diffstat (limited to 'src/video_core/dma_pusher.cpp')
| -rw-r--r-- | src/video_core/dma_pusher.cpp | 3 |
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 | } |