feat: add Low GPU Accuracy setting for maximum performance

Implements a new "Low" GPU accuracy level that prioritizes performance
over accuracy by aggressively cutting corners in GPU emulation.

Changes:
- Add GpuAccuracy::Low enum and setting infrastructure
- Implement IsGPULevelNormal() helper function
- Skip texture cache checks and query operations
- Use unsafe memory reads for DMA operations
- Disable fence delays and query precision
- Add UI support for desktop (Qt) and Android

Performance optimizations:
- Skips texture cache coherency checks (vk/gl_rasterizer.cpp)
- Non-blocking query synchronization (query_cache.h)
- Unsafe memory operations (dma_pusher.cpp)
- No macro parameter refresh (maxwell_3d.cpp)
- Immediate fence signaling (fence_manager.h)
- Non-precise Vulkan queries (vk_query_cache.cpp)

Ideal for lower-end hardware and users prioritizing FPS over accuracy.
Works on both desktop and Android platforms.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2025-10-01 21:45:23 +10:00
parent 746f748973
commit 9090a24c2e
17 changed files with 57 additions and 19 deletions

View File

@@ -3960,14 +3960,21 @@ void GMainWindow::OnToggleDockedMode() {
void GMainWindow::OnToggleGpuAccuracy() {
switch (Settings::values.gpu_accuracy.GetValue()) {
case Settings::GpuAccuracy::High: {
case Settings::GpuAccuracy::Low: {
Settings::values.gpu_accuracy.SetValue(Settings::GpuAccuracy::Normal);
break;
}
case Settings::GpuAccuracy::Normal:
case Settings::GpuAccuracy::Normal: {
Settings::values.gpu_accuracy.SetValue(Settings::GpuAccuracy::High);
break;
}
case Settings::GpuAccuracy::High: {
Settings::values.gpu_accuracy.SetValue(Settings::GpuAccuracy::Low);
break;
}
case Settings::GpuAccuracy::Extreme:
default: {
Settings::values.gpu_accuracy.SetValue(Settings::GpuAccuracy::High);
Settings::values.gpu_accuracy.SetValue(Settings::GpuAccuracy::Normal);
break;
}
}