[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: #304
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
This commit is contained in:
MaranBr 2025-08-23 19:42:10 +02:00 committed by crueter
parent a51953e4f9
commit 5b864d406d
Signed by: crueter
GPG key ID: 425ACD2D4830EBC6
33 changed files with 262 additions and 4 deletions

View file

@ -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 {