diff options
Diffstat (limited to 'src/video_core/dma_pusher.cpp')
| -rw-r--r-- | src/video_core/dma_pusher.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp index 322de2606..eb1371612 100644 --- a/src/video_core/dma_pusher.cpp +++ b/src/video_core/dma_pusher.cpp | |||
| @@ -61,7 +61,7 @@ bool DmaPusher::Step() { | |||
| 61 | } else { | 61 | } else { |
| 62 | const CommandListHeader command_list_header{ | 62 | const CommandListHeader command_list_header{ |
| 63 | command_list.command_lists[dma_pushbuffer_subindex++]}; | 63 | command_list.command_lists[dma_pushbuffer_subindex++]}; |
| 64 | const GPUVAddr dma_get = command_list_header.addr; | 64 | dma_state.dma_get = command_list_header.addr; |
| 65 | 65 | ||
| 66 | if (dma_pushbuffer_subindex >= command_list.command_lists.size()) { | 66 | if (dma_pushbuffer_subindex >= command_list.command_lists.size()) { |
| 67 | // We've gone through the current list, remove it from the queue | 67 | // We've gone through the current list, remove it from the queue |
| @@ -75,11 +75,11 @@ bool DmaPusher::Step() { | |||
| 75 | 75 | ||
| 76 | // Push buffer non-empty, read a word | 76 | // Push buffer non-empty, read a word |
| 77 | command_headers.resize_destructive(command_list_header.size); | 77 | command_headers.resize_destructive(command_list_header.size); |
| 78 | if (Settings::IsGPULevelHigh()) { | 78 | if (Settings::IsGPULevelExtreme()) { |
| 79 | memory_manager.ReadBlock(dma_get, command_headers.data(), | 79 | memory_manager.ReadBlock(dma_state.dma_get, command_headers.data(), |
| 80 | command_list_header.size * sizeof(u32)); | 80 | command_list_header.size * sizeof(u32)); |
| 81 | } else { | 81 | } else { |
| 82 | memory_manager.ReadBlockUnsafe(dma_get, command_headers.data(), | 82 | memory_manager.ReadBlockUnsafe(dma_state.dma_get, command_headers.data(), |
| 83 | command_list_header.size * sizeof(u32)); | 83 | command_list_header.size * sizeof(u32)); |
| 84 | } | 84 | } |
| 85 | ProcessCommands(command_headers); | 85 | ProcessCommands(command_headers); |
| @@ -174,8 +174,10 @@ void DmaPusher::CallMultiMethod(const u32* base_start, u32 num_methods) const { | |||
| 174 | puller.CallMultiMethod(dma_state.method, dma_state.subchannel, base_start, num_methods, | 174 | puller.CallMultiMethod(dma_state.method, dma_state.subchannel, base_start, num_methods, |
| 175 | dma_state.method_count); | 175 | dma_state.method_count); |
| 176 | } else { | 176 | } else { |
| 177 | subchannels[dma_state.subchannel]->CallMultiMethod(dma_state.method, base_start, | 177 | auto subchannel = subchannels[dma_state.subchannel]; |
| 178 | num_methods, dma_state.method_count); | 178 | subchannel->current_dma_segment = dma_state.dma_get; |
| 179 | subchannel->CallMultiMethod(dma_state.method, base_start, num_methods, | ||
| 180 | dma_state.method_count); | ||
| 179 | } | 181 | } |
| 180 | } | 182 | } |
| 181 | 183 | ||