summaryrefslogtreecommitdiff
path: root/src/video_core/dma_pusher.cpp
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2022-11-27 00:58:06 +0100
committerGravatar Fernando Sahmkow2023-01-01 16:43:57 -0500
commitcb1497d0d7711a1c0e527aaa3e1dc3f95e5a6644 (patch)
tree46e00278c6265ed501488e7c6f02fc4c12a6af6c /src/video_core/dma_pusher.cpp
parentRevert Buffer cache changes and setup additional macros. (diff)
downloadyuzu-cb1497d0d7711a1c0e527aaa3e1dc3f95e5a6644.tar.gz
yuzu-cb1497d0d7711a1c0e527aaa3e1dc3f95e5a6644.tar.xz
yuzu-cb1497d0d7711a1c0e527aaa3e1dc3f95e5a6644.zip
DMAPusher: Improve collection of non executing methods
Diffstat (limited to 'src/video_core/dma_pusher.cpp')
-rw-r--r--src/video_core/dma_pusher.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp
index b3e9cb82e..551929824 100644
--- a/src/video_core/dma_pusher.cpp
+++ b/src/video_core/dma_pusher.cpp
@@ -178,6 +178,11 @@ void DmaPusher::CallMethod(u32 argument) const {
178 }); 178 });
179 } else { 179 } else {
180 auto subchannel = subchannels[dma_state.subchannel]; 180 auto subchannel = subchannels[dma_state.subchannel];
181 if (!subchannel->execution_mask[dma_state.method]) [[likely]] {
182 subchannel->method_sink.emplace_back(dma_state.method, argument);
183 return;
184 }
185 subchannel->ConsumeSink();
181 subchannel->current_dma_segment = dma_state.dma_get + dma_state.dma_word_offset; 186 subchannel->current_dma_segment = dma_state.dma_get + dma_state.dma_word_offset;
182 subchannel->CallMethod(dma_state.method, argument, dma_state.is_last_call); 187 subchannel->CallMethod(dma_state.method, argument, dma_state.is_last_call);
183 } 188 }
@@ -189,6 +194,7 @@ void DmaPusher::CallMultiMethod(const u32* base_start, u32 num_methods) const {
189 dma_state.method_count); 194 dma_state.method_count);
190 } else { 195 } else {
191 auto subchannel = subchannels[dma_state.subchannel]; 196 auto subchannel = subchannels[dma_state.subchannel];
197 subchannel->ConsumeSink();
192 subchannel->current_dma_segment = dma_state.dma_get + dma_state.dma_word_offset; 198 subchannel->current_dma_segment = dma_state.dma_get + dma_state.dma_word_offset;
193 subchannel->CallMultiMethod(dma_state.method, base_start, num_methods, 199 subchannel->CallMultiMethod(dma_state.method, base_start, num_methods,
194 dma_state.method_count); 200 dma_state.method_count);