aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/dma_pusher.cpp
diff options
context:
space:
mode:
authorMaranBr <maranbr@outlook.com>2025-08-23 19:42:10 +0200
committercrueter <crueter@eden-emu.dev>2025-08-23 19:42:10 +0200
commit5b864d406d44cd786b00ce0a4cec70fc44930652 (patch)
tree9fac927346362e6b18843303d7e7b84565cc5024 /src/video_core/dma_pusher.cpp
parenta51953e4f9f8ec4868c473857a4f297eb7a5e2b8 (diff)
[video_core] Add option to control the DMA precision level at runtime (#304)
This adds an option to control the DMA precision level at runtime. Co-authored-by: crueter <crueter@eden-emu.dev> Co-authored-by: PavelBARABANOV <pavelbarabanov94@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/304 Reviewed-by: crueter <crueter@eden-emu.dev> Co-authored-by: MaranBr <maranbr@outlook.com> Co-committed-by: MaranBr <maranbr@outlook.com>
Diffstat (limited to 'src/video_core/dma_pusher.cpp')
-rw-r--r--src/video_core/dma_pusher.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp
index 8ea4cbd43a..4b9a506cdf 100644
--- a/src/video_core/dma_pusher.cpp
+++ b/src/video_core/dma_pusher.cpp
@@ -102,9 +102,18 @@ bool DmaPusher::Step() {
ProcessCommands(headers);
};
- if (Settings::IsGPULevelExtreme()) {
+ const Settings::DmaAccuracy accuracy = Settings::values.dma_accuracy.GetValue();
+ const bool use_gpu_accuracy = accuracy == Settings::DmaAccuracy::Default;
+
+ // reduces eye bleeding but also macros are dumb so idk
+#define CHECK_LEVEL(level) use_gpu_accuracy ? Settings::IsGPULevel##level() : accuracy == Settings::DmaAccuracy::level;
+ const bool force_safe = CHECK_LEVEL(Extreme)
+ const bool unsafe_compute = CHECK_LEVEL(High)
+#undef CHECK_LEVEL
+
+ if (force_safe) {
safe_process();
- } else if (Settings::IsGPULevelHigh()) {
+ } else if (unsafe_compute) {
if (dma_state.method >= MacroRegistersStart) {
unsafe_process();
} else {