Repository navigation
Performance Unproven
Reviewed: 2026-11-01 · Source: b7140848 · Availability: current main; stable/main boundaries are stated below.
This directory covers remaining proposal scope. Some linked pages now contain delivered or measured components; their status below takes precedence over the original candidate classification. See Implemented and Researched.
Every row below opens a standalone technical reference page. The subject page—not a PR—is the primary reference for the mechanism. Each page contains source seams, current and proposed flows, implementation or assembly sketches, invariants, pros/cons, evidence counters, and a qualification plan.
Audio · PFIFO / MMIO · Vulkan: state and prepared work · Vulkan: throughput and residency · vCPU / TCG
| Item | Type | What it tests | Full technical reference |
|---|---|---|---|
| Linear Audio Resampling | Explicit quality/performance approximation | Use libsamplerate's linear converter instead of the current sinc converter under a clearly labeled audio-quality policy. | Open full page → |
| Prepared Voice Controls | Prepared-state optimization | Decode voice routing, attenuation, format, and static filter inputs once per validated control-word version instead of repeatedly reading and transforming the same guest data. | Open full page → |
| Span-Based Audio Fetch | Memory-loop restructuring | Resolve one bounded contiguous guest-memory span and one conversion kernel, then process many samples/ADPCM words instead of translating and dispatching each element. | Open full page → |
Every row links to a standalone technical reference. The subject page—not a PR—is the primary design and qualification reference.
| Item | Type | What it tests | Full technical reference |
|---|---|---|---|
| Native depth variant | Numerical/early-depth experiment | Remove custom fragment-depth writes for a narrowly admitted host-depth route. | Open full page → |
| Asynchronous display handoff | Host synchronization architecture | Replace CPU waits between render/display contexts with explicit GPU dependencies and slot lifetime. | Open full page → |
| Completed display reuse | Retained-result shortcut | Reuse a completed composition when the complete source/scanout/PVIDEO key still matches. | Open full page → |
| Uniform epoch tracking | Prepared-state shortcut | Skip reconstruction and GL uploads for program-local uniform groups that did not change. | Open full page → |
| GPU-downscaled readback | Transfer-reduction optimization | Downscale to guest resolution before readback instead of discarding scaled pixels on the CPU. | Open full page → |
| Persistent mapped geometry streaming | Streaming-buffer architecture | Use retired mapped slices instead of repeated orphan/subdata uploads for admitted streams. | Open full page → |
| Copy-image surface transfer | Exact copy subset | Use direct image-data copy for representation-compatible surface-to-texture updates. | Open full page → |
| Direct surface binding | Copy-bypass shortcut | Sample the render surface directly when representation, version, lifetime, and feedback rules permit. | Open full page → |
| Sampler objects | Sampling-state separation/cache | Reuse independent sampler state instead of mutating texture objects for every effective sampling change. | Open full page → |
| Render-state shadow | State-call suppression | Issue blend/depth/stencil/raster/binding calls only when the effective per-context state changes. | Open full page → |
| Deferred pooled occlusion queries | Query lifetime/scheduling | Pool exact query objects and defer blocking retrieval until guest ordering requires the value. | Open full page → |
| PVIDEO GPU conversion | Resource reuse/GPU conversion | Reuse overlay storage and move packed YUV conversion into display composition. | Open full page → |
| Cold shader stall avoidance | Asynchronous/alternate execution | Overlap first-seen compile/link work or use a proven OpenGL fallback route. | Open full page → |
Open the OpenGL candidate overview →
Open the APU/DSP investigation overview →
Every row links to a standalone technical reference. The subject page—not a PR—is the primary investigation reference.
| Item | Type | What it tests | Full technical reference |
|---|---|---|---|
| DSP JIT qualification | Delivered default / remaining qualification | JIT default is in stable; broader compatibility/PCM/lifecycle evidence remains bounded | Open full page → |
| Voice-worker dispatch and mix reduction | Host scheduling/aggregation | Find the worker-count crossover, avoid empty wakeups, and reduce only touched mix bins | Open full page → |
| Prepared Voice Controls | Prepared-state optimization | Decode stable voice control/routing/filter inputs once per safe block | Open full page → |
| Span-Based Audio Fetch | Memory-loop restructuring | Resolve safe guest-memory/SGE spans once instead of per sample or compressed word | Open full page → |
| Bulk VP-to-DSP mix transfer | Exact backend shortcut | Replace 1,024 generic DSP writes per subframe with one exact block transfer | Open full page → |
| DSP DMA block transfers | Memory/backend restructuring | Decode descriptors once and transfer DSP/guest spans without word callbacks and an intermediate scratch copy | Open full page → |
| APU frame-lock contention | Measurement-first synchronization | Measure vCPU/MMIO wait against APU frame lock hold time before redesigning ownership | Open full page → |
| HRTF optimization | Exact/specialized signal processing | Remove circular-index and scalar-convolution overhead while preserving the declared audio contract | Open full page → |
| Experimental lazy GP/EP execution | Destructive observation experiment | Measure whether DSP work can be deferred when host audio monitors VP and no guest observation occurs | Open full page → |
| Peripheral opportunity counters | Instrumentation gate | Decide whether APU idle wakeups, OHCI, PTIMER, NVNet, or IDE deserve separate investigations | Open full page → |
Delivered: DSP JIT selection defaults true(#183), Auto-four workers(#200), reliability#201/#305 and callback-local CFG_FMT#191. Descriptor/payload mappings#190/#275 partially implement fetch preparation. Full scheduler, persistent controls, span/kernel engine, lazy execution and HRTF proposals remain research; their broader benefits are not established.
| Item | Type | What it tests | Full technical reference |
|---|---|---|---|
| PFIFO Constant Status Read | Current-model constant-response lock bypass | Return the value already modeled as constant for NV_PFIFO_RUNOUT_STATUS without taking the general PFIFO mutex, if access semantics and instrumentation remain intact. | Open full page → |
| Item | Type | What it tests | Full technical reference |
|---|---|---|---|
| Approximate Occlusion Reports | Title-scoped guest-result approximation | Avoid issuing and retrieving exact host occlusion counts by substituting a documented approximate guest result for workloads that only need a visibility hint. | Open full page → |
| Direct Surface Sampling | Guarded image-copy bypass | Sample a compatible rendered surface image directly instead of copying it into a separate texture image. | Open full page → |
| Frame-Scoped Texture Trust | Explicit stale-within-frame approximation | Validate an admitted RAM-backed texture on first use in a guest frame, then bypass further dirty-page, overlap, and content checks until the defined next validation boundary. | Open full page → |
| Precompiled Internal Shaders | Build-time preparation | Compile fixed xemu-owned GLSL during the build and embed compatible SPIR-V instead of invoking the runtime compiler at renderer initialization. | Open full page → |
| Prepared Vertex Layout | Prepared structural draw state | Cache the attribute-format/layout plan across draws while still resolving current addresses, ranges, freshness, and provoking values per draw. | Open full page → |
| Shader Selection Epoch Trust | Generation-based shader-selection shortcut | Replace repeated multi-category shader dependency inspection with one complete generation comparison, while leaving current uniforms and resources live. | Open full page → |
| Surface Coverage Index | Conservative spatial metadata/index | Answer common no-overlap range queries without walking every surface, while retaining exact checks for positive or ambiguous cases. | Open full page → |
| Texture Image / Sampler Separation | Cache and ownership redesign | Separate texture pixel representation from sampling state so filter/address/border changes do not duplicate image allocations and uploads when the underlying host image can be shared. | Open full page → |
| Uniform Update Plans | Dirty-summary and prepared-copy optimization | Maintain compact dirty summaries and a shader-layout-specific copy plan so clean arrays are not rescanned and inactive uniform metadata is not reinterpreted on every update. | Open full page → |
| Item | Type | What it tests | Full technical reference |
|---|---|---|---|
| Adaptive Buffer Placement | Device-aware memory-placement policy | Choose mapped-direct versus staged device-local storage from actual Vulkan memory properties and measured access patterns instead of one fixed policy for unlike hosts. | Open full page → |
| Dynamic Uniform Descriptors | Descriptor architecture | Use dynamic offsets for ordinary VSH/PSH uniform buffers so changing constant offsets does not require rewriting unchanged texture descriptors or consuming another set. | Open full page → |
| GPU-Resident Surface Consumers | Representation/coherency architecture | Keep GPU-produced data on the GPU when the next consumer is also GPU-side, materializing guest RAM only at real CPU/device observation boundaries. | Open full page → |
| Native Vulkan Presentation | Frontend/presentation architecture | Present the Vulkan-composed image through a Vulkan swapchain and Vulkan UI path, removing the requirement to synchronously expose each new output as an OpenGL texture. | Open full page → |
| PVIDEO Resource Lifetime | Resource reuse plus GPU conversion | Stop recreating PVIDEO image/view/sampler objects on every upload, then test packed upload and GPU-side YUV conversion in the display batch. | Open full page → |
| Submission and Resource Retirement | Asynchronous batch ownership architecture | Decouple queue submission from immediate CPU completion and recycle descriptors, staging ranges, framebuffers, queries, and cache references only after the owning submission completes. | Open full page → |
| Item | Type | What it tests | Full technical reference |
|---|---|---|---|
| Direct-RAM Read Windows | Speculative multi-access SoftMMU shortcut | Validate one stable RAM window for a recognized translated region and use direct host loads for several reads instead of repeating software-TLB preparation for each access. | Open full page → |
| FP Control-State Retention | Guarded host floating-point environment shortcut | Keep known-valid host FP control state across audited boundaries instead of broadly clearing the translator's knowledge and re-emitting MXCSR setup. | Open full page → |
| Helper-Aware x87 Cache Retention | State-materialization bypass | Keep cached x87 temporaries live across explicitly audited FP-independent helpers instead of unconditionally converting them to canonical 80-bit guest state before every helper call. | Open full page → |
| Native Reciprocal Estimates | Approximate ISA-native shortcut | Emit host RCPPS/RCPSS/RSQRTPS/RSQRTSS estimates for the guest estimate instructions instead of lane-wise mathematical reciprocal and square-root/division helper work. | Open full page → |
| Native SSE Arithmetic | Host-ISA direct-emission shortcut | Emit a narrowly admitted subset of guest SSE floating-point arithmetic directly instead of per-lane helper execution, under an explicit host FP-environment contract. | Open full page → |
| Recognized Poll-Loop Wait | Guest-execution bypass with event wake | Recognize one exact side-effect-free guest polling loop and sleep the vCPU until the producing emulated event, interrupt, timer, invalidation, or deadline requires retrying the original loop. | Open full page → |
| REP MOVS RAM Chunks | Bounded guest-memory loop shortcut | For a narrow admitted forward non-overlapping RAM case, copy a bounded chunk natively instead of executing generic guest address/load/store/bookkeeping for every element. | Open full page → |
| Windows XMM Register Budget | Win64 JIT register-allocation optimization | Save selected nonvolatile XMM registers at the C-to-JIT boundary so TCG can allocate more than XMM0-XMM4 during translated execution and potentially reduce spills. | Open full page → |
| x87 Comparison Flag Capture | Host instruction-selection experiment | Replace the current COMISD/COMISS plus PUSHF/POP full-flag capture with a smaller sequence that extracts only CF, PF and ZF if it is measurably better on the target host. | Open full page → |
Move an item to Researched only after real xemu runtime, profiling, or PR evidence exists. Move it to Implemented only after the mechanism lands in current main.
A negative or failed experiment moves to Researched, because the result prevents repeated work.
This section preserves 27 workstreams from the source-backed research expansion. It is an additive research register, not a replacement for the original page or a claim that every existing wiki idea was reviewed. Source inspection is pinned to 322986f4c5502b3fa887a9605ac8cd88e9b2c579; historical repository measurements retain their original build/workload scope.
Start with Performance research — common test protocol and Performance research — reproducible checks. Standalone checks were re-run while preparing these notes; no production xemu patch, game benchmark or full-emulator qualification was performed by this documentation update.
Bounded first: A11 attenuation lookup; A01 bulk mixbuffer writes; A07 indexing after its independent target-update repair. Profile-guided next: G01 warm uniform work, G02 exact vertex ranges, A08/A09 repeated preparation, C02 dirty-TLB metadata and C04 PFIFO/PGRAPH handoff attribution. Model ownership first: A03 state fidelity, A04 quiescence, A05 lock splitting, G03 report observation and C03 callback retirement.
| Topic | Evidence added | First experiment |
|---|---|---|
| A01 — Bulk VP-to-DSP transfer | 1,024 scalar writes per frame; backend ownership identified | One backend-owned 1,024-word mixbuffer write |
| A02 — DSP DMA block transfers | Per-word callbacks plus staging; formats are not memcpy-equivalent | Contiguous noninterleaved ordinary-memory transfers |
| A03 — DSP JIT qualification and optimization | Current-state N/M widening is not an identity | Separate current-state round trip from legacy migration |
| A04 — Lazy GP/EP execution | Zero input can retain effect tails and other side effects | Explicit disabled/reset-state equivalence, not silence detection |
| A05 — APU frame-lock contention | Frame work and guest DSP writes share a lock | Measure vCPU-blocking wait, then isolate one immutable work unit |
| A06 — Voice-worker dispatch and reduction | Scheduling/merge overhead, not missing parallelism | Inline small eligible work while preserving multipass grouping |
| A07 — HRTF addressing, smoothing, and SIMD | Index-walk equivalence plus stale right-target counterexamples | Separate target-update correctness repair from index walking |
| A08 — Span-based voice fetch | Repeated PCM/ADPCM SGE and physical-memory access | One boundary-limited ordinary-RAM span |
| A09 — Prepared voice-control data | Some reads already hoisted; pure-value caching is narrower | Per-invocation typed controls and input-keyed derivations |
| A10 — Peripheral opportunity counters | Establish eligible work and instrumentation overhead first | Bounded per-thread counts with end-of-window aggregation |
| A11 — Exact finite-domain volume attenuation table | 4,096-value domain; immutable 16 KiB table | Table initialized with the unchanged attenuation expression |
| G01 — Warm texture/shader uniform work | Warm uniform preparation is a measured historical hotspot | Avoid unchanged derived uniform work, not only UBO writes |
| G02 — Exact vertex byte ranges instead of page-expanded readback triggers | Page-expanded vertex range can trigger unrelated readbacks | Exact consumer-range guard after coarse overlap lookup |
| G03 — Deferred/asynchronous occlusion-report completion | 11.006 ms median STALLED wait in one historical diagnostic | Trace report publication and first required guest observation |
| G04 — Ordered vertex staging and timeline-managed ring buffers | Per-range retirement can replace broad waits | Bounded upload allocation with explicit last-reader retirement |
| G05 — Descriptor reuse and pool capacity | Capacity-only probe moved a wait instead of proving a win | Reuse complete effective descriptor identity |
| G06 — Shader-source deduplication, SPIR-V persistence, and prewarming | Duplicate generated sources and first-use compiler stalls recorded | Exact-source deduplication independent of driver pipeline caching |
| G07 — Hybrid ubershaders and asynchronous specialization | Correct fallback enables asynchronous specialization without skipped draws | Differential fallback/specialized output and atomic package publication |
| G08 — Native BC/DXT textures | Avoiding decode/expanded upload has a concrete mechanism | Native-versus-decoded sampling with valid per-format staging layout |
| G09 — Pipeline-key minimization and texture-scale suppression | 79.9% fewer lookups corresponded to 1.079% historical throughput gain | One-field dependency table against always-recompute reference |
| G10 — Batched submissions and multithreaded command recording | Batching needs immutable tasks and demonstrated recording cost | Attribute serial recording cost before parallel dispatch |
| C01 — Static-state TB lookup and block chaining | Dispatcher cost is addressable only at legal lookup/chaining boundaries | One redundant key derivation or missed legal chain |
| C02 — Active-MMU dirty reset, range-helper inlining, and tiny-draw metadata | Conservative metadata can skip only provably empty eligible structures | Randomized full-scan versus optimized state comparison |
| C03 — Cached memory-access callbacks | Identity generations do not keep callback objects alive | Delayed-reader retirement stress before lookup optimization |
| C04 — PFIFO/PGRAPH dispatch handoffs and command-front-end batching | Source-confirmed ownership transfer per dispatch; selected inline packets already have packet-level bulk handling | Count handoffs, words per handoff, contention and zero-progress returns before bounded cross-packet batching |
| T01 — PTIMER masked-alarm work and overdue-epoch coalescing | Host callback scheduling is distinct from guest alarm state | Controlled guest-time reconcile tests at every observation boundary |
| T02 — Exact QPC scaling and presentation-deadline control | Clock arithmetic and guest time semantics must stay distinct | Exact integer scaling oracle plus fixed-work pacing controls |
MODEL_CHECKED establishes only the modeled domain. REDUCTION_REPRODUCED establishes a standalone source-equivalent case. SOURCE_CONFIRMED establishes that the inspected code contains the mechanism. REPOSITORY_REPORTED attributes an old measured result to its original source/build. PROPOSED_TEST is not a passing result. None is automatically PRODUCT_QUALIFIED.
Keep results and implementation status on the individual topic pages; keep this index to short findings and next tests. When a candidate is implemented, attach exact source and evidence identities before updating its status.
The MCPX recheck found that the strongest remaining non-graphics opportunities are concentrated in small 32-sample audio blocks crossing worker scheduling, guest-memory translation, DSP backend calls, DMA conversion, HRTF processing, and the APU frame mutex. The pages below preserve the verified starting point, source seams, counters, failure modes, and qualification gates so implementation work does not restart from zero.
| Investigation | Evidence class | Full notes |
|---|---|---|
| Existing DSP56300 JIT qualification | Existing alternate engine; compatibility and gain unproven | APU DSP JIT Qualification |
| Voice-worker dispatch and full-matrix reduction | Source-confirmed fixed scheduling/reduction work; runtime share unmeasured | Voice-Worker Dispatch and Mix Reduction |
| Prepared voice controls | Existing subject page enriched with authority, invalidation, and negative-control requirements | Prepared Voice Controls |
| Span-based PCM/ADPCM fetching | Existing subject page enriched with safe span boundaries and ownership rules | Span-Based Audio Fetch |
| Bulk VP-to-DSP mix transfer | Exact backend shortcut candidate; 1,024 generic writes per active subframe are source-derived | Bulk VP-to-DSP Mix Transfer |
| DSP DMA block transfers | Source-confirmed word/callback/intermediate-buffer path; frequency must be counted | DSP DMA Block Transfers |
| APU frame-lock contention | Measurement-first cross-thread interference investigation | APU Frame-Lock Contention |
| HRTF convolution | Strong but workload-dependent inner-loop investigation | APU HRTF Optimization |
| Lazy GP/EP execution | Explicitly destructive observation experiment, not a normal optimization toggle | Experimental Lazy GP / EP Execution |
| Secondary peripheral counters | Promotion gate for OHCI, PTIMER, NVNet, IDE, and APU idle wakeups | Peripheral Opportunity Counters |
Start with the APU / DSP Performance Investigations directory. No performance improvement in this suite is established until fixed-work Release measurements and guest-visible correctness comparisons exist.
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