Repository navigation
Using Performance Controls
Reviewed: 2026-11-01 · Source: b7140848 · Availability: current main; stable/main boundaries are stated below.
These instructions describe reviewed November main. The latest stable is September 30; later defaults and controls are labelled below. Release availability. Defaults are for a fresh configuration: explicitly saved values survive upgrades.
The top-level settings tab is literally Advance. Audio has its own Quality and Advanced sections; hard FPU is in General > Performance. Source: UI, configuration defaults, policy resolver.
| Control / key | Fresh default and scope | Why change it / interactions | Apply and confirmation |
|---|---|---|---|
Display > Renderer > Backend (display.renderer) |
OpenGL | Select Vulkan to use its pipeline/cache routes; verify actual GPU/transport, particularly cross-adapter host-copy. | Inspect active backend and adapter in runtime status/log. |
Display > Renderer > Adapter (display.vulkan.device_uuid) |
Automatic; Vulkan | Select an exact GPU UUID; unavailable saved adapters are shown explicitly. OpenGL selection remains OS/driver-controlled. | Restart xemu; compare saved adapter with Active adapter, actual UUID and sharing/host-copy transport. |
Display > Renderer > Internal resolution scale (display.quality.surface_scale) |
1× | Resolution changes GPU work and resource size; pin it for comparisons. | Active scale changes through the renderer; confirm the displayed value. |
Display > Window > Vertical refresh sync (display.window.vsync) |
On | Presentation pacing can cap useful cadence and change wait behavior. | Confirm active setting; benchmark values may deliberately differ. |
Advance > Vulkan ubershader mode (tweaks.vk_ubershader_mode) |
Prewarm | Off=specialized; Fallback=use ready eligible fallback; Prewarm=bounded launch-history preparation; Always=diagnostic interpreter route for supported draws. All modes retain correctness fallback. | Quit and restart xemu; compare requested and active mode. Saved preference overrides new default. |
Advance > Cache shaders (perf.cache_shaders) |
On; backend-specific | Separate exact SPIR-V, learned recipes and driver pipelines; GL program binaries are another layer. Deleting one cache does not reset all layers. | Choice saved immediately; Vulkan re-enabling after cache-off can require renderer recreation/restart. Verify restoration/hit logs, not just the checkbox. |
Reduce CPU usage while waiting (tweaks.cpu_saving_wait) |
On; Windows only | Interruptible short waits reduce polling CPU; may alter wake tails. | Subsequent waits; verify effective platform status. |
Process vertex packets in bulk (tweaks.pgraph_bulk_packets) |
On; GL/Vulkan | Batch admitted arrays; Off retains scalar dispatch. | Subsequent eligible packets; a permitted bit does not prove scene reachability. |
Fast GPU fence polling (tweaks.pgraph_fence_fastpath) |
On; GL/Vulkan | Exact lock-free fence reads; Off retains locked route. | Subsequent eligible reads; retain ordering/size guards. |
Skip unchanged shader work (tweaks.vk_shader_fastpath) |
On; Vulkan | Skip redundant shader/pipeline work when dependency identity matches; uniforms/control data still update. Depends on eligible hybrid behavior. | Subsequent draws; UI is disabled while active hybrid mode is Off. |
Combine color downloads with rendering (tweaks.vk_color_download_folding) |
On; Vulkan | Eligible readbacks share a submission; unsupported cases stay separate. | Live at subsequent eligible downloads; ownership checks remain. |
Upload only used vertex ranges (tweaks.vk_bounded_vertex_uploads) |
On; Vulkan | Copy/repack the referenced range instead of unused leading vertices. | Live; checked spans and fallback remain. |
Avoid ordered vertex copies (tweaks.vk_vertex_copy_shortcuts) |
On; Vulkan | Direct unread-page writes or private versions avoid eligible ordered copies. | Live; unsafe lifetime/overlap cases retain ordered fallback. |
Grow transient buffers to fit batches (tweaks.vk_transient_buffer_growth) |
On; Vulkan | Retain bounded capacity after demand, trading memory for fewer capacity drains. | Restart xemu; large individual draws still require enough capacity. |
Upload compressed textures directly (tweaks.gl_native_s3tc) |
On; OpenGL | Use supported native S3TC upload; Off CPU-decodes. Vulkan native BC handling is separate. | Restart xemu; capability/format guards remain. |
Accurate NV20 vertex arithmetic (tweaks.nv20_vertex_arithmetic) |
Off diagnostic; OpenGL/Vulkan shader arithmetic | Hardware-style arithmetic can be substantially slower; use for diagnosis. It is distinct from the Ghoulies DOT_ZW correction. | Live, without a process restart; check effective diagnostic choice and subsequent shader use against a named reproduction. |
General > Performance > Hard FPU emulation (perf.hard_fpu) |
On, supported x86_64 | Existing approximation/accuracy tradeoff; #296 automatically optimizes FNSTSW AX within this choice. ARM branch #321 is not delivered. | Restart xemu; no separate #296 switch. |
Audio > Quality > Real-time DSP processing (audio.use_dsp) |
Off | Changes processing/scheduling behavior; disabling it does not stop all DSP execution. | Preferences applied at frame boundary; distinguish from engine selection. |
Audio > Quality > DSP JIT engine (audio.use_dsp_jit) |
On | Choose existing JIT versus interpreter; explicit saved false remains valid. | Engine preference applies at frame boundary; log actual engine. This default is in stable. |
Audio > Advanced > Voice processing workers (audio.vp.num_workers) |
Auto (0):1 to4 based on logical CPUs; explicit 1–16 | Balance scheduling overhead with voice throughput; independent of held linear resampler #189. | Restart xemu. Auto-four is main-only after #200; stable had Auto up to16. |
#257's typed Auto/Disabled/Enabled resolver and requested/effective/reason/restart machinery are in main. The ordinary Boolean toggles still expose On/Off and map their saved values to Enabled/Disabled; generic tri-state infrastructure does not add Auto to every UI item. A pending restart means the new saved choice is not active. Unavailable backend/platform can make an enabled request ineffective.
Current main supports -config_path PATH. Proposed -xemu-tweak and -xemu-shortcut-evidence options belong to unmerged #314 and must not appear in current launch recipes. #258's additional clean-stage policy/evidence consumer is also unmerged. No current instructions require either flag.
saved request -> resolver/backend capability -> published effective permission
process-start choices -> active until next process
live choices -> next eligible operation
permission + actual eligibility -> executed route
An effective bit proves permission, not that a scene hit the route. Use qualified counters/trace when attribution matters. Turning a control Off selects its maintained reference path; it does not authorize bypassing dirty tracking, bounds, invalidation or ordering checks.
Record the executable version/source/hash, build profile, OS, actual renderer/GPU/driver, shared versus host-copy transport, configuration file, saved and active settings, restart performed, title/scene/input and cache conditions. Change one declared policy at a time. Keep original input/wait/analysis windows; compare ABBA then BAAB where required. Report correctness, guest cadence, tails and CPU together. Methodology.
Windows wait/capture behavior, Linux-only uploads and x86-only hard FPU have different applicability. Ryzen/RTX laptop evidence does not describe every Windows desktop; Deck evidence is not ARM qualification. For OBS/DXGI reports, name the capture path and reproduce the symptom rather than applying a universal workaround unsupported by the evidence.
Verify which cache was restored, its identity, actual hits and cold/warm role. Shader-cache On does not prove a pipeline hit or eliminate GLSL generation/reflection/module creation. Missing prewarm stage artifacts may be prepared asynchronously under #228; current optional admission follows launch-loaded history, with future demand learned for later launches(#336). Cache/readiness details.
Normal main uses sinc resampling. One-channel mono #182, owned ADPCM reuse #187, mapping reuse #190/#275 and local format #191 are separate mechanisms; broader prepared controls/span engines remain research. Confirm PCM/lifecycle behavior rather than assuming lower component CPU implies audible equivalence. Audio.
DSP tooling guide and navigation updated November 2, 2026 for experimental PR #384, source 8f51d237. Capture/replay usage and limits.
The earlier wiki-wide review was published November 1, 2026. Emulator source: b7140848. Reviewed wiki content: 1d2b671. Current status · Release availability · Publication process.
- Home
- Current status
- Stable versus main
- Implemented mechanisms
- Controls and defaults
- Measured results and limits
- Complete change register
- System
- CPU and vCPU
- Memory and DMA
- Graphics / NV2A
- APU and audio
- Timing and timers
- Platform and I/O
- Hardware observations
- Fidelity boundaries
- Methodology
- PGR2 routes
- Debugging lag / hot paths
- Tools and commands
- DSP capture, replay and fuzzing
- HLE readiness and public XISO proof
- Concurrent DSP shadow and OpenAL proof
- DSP HLE operation inventory
- DSP HLE fix examples and testing
- Development
- Upstream shortlist
- Wiki maintenance
- Research / retired work
- Optimization catalog
- Hot-path shortcuts
- Researched experiments
- Unproven proposal directory
- PR lessons
- September26 snapshot
Repository · PRs · Issues