Skip to content

Using Performance Controls

OpenAI Codex edited this page Nov 1, 2026 · 3 revisions

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.

Find the actual controls

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.

Policy, saved request and active execution

#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.

Reproduce a problem or compare one setting

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.

Cache and audio checks

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.

Clone this wiki locally