Skip to content

Upstream Work

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

Upstream Work

For fork changes worth offering upstream, use the dedicated contribution shortlist: PR, summary, improvement metrics/correctness outcome, upstream overlap and remaining work. This hub tracks existing upstream PRs and overlap. On November 1 the 26-page September review set contains 23 open PRs, two closed without merge, and one merged PR. That count describes this review set, not all upstream work.

Reviewed: November 1, 2026. Fork source: b7140848 (full SHA b71408480a3a979a9c584663e1d1f400904c8bb7). Latest stable checked: v0.8.136-0-g458730bf5373, September 30, source 458730bf5373f1f0d027450fef7443e3af7a3ae1. GitHub state, branch recommendation, source presence and release availability are separate facts. See current status and release versus main.

Current feature register · Actionable research · Research and retired work

Current upstream disposition

All 26 current metadata records were retrieved from GitHub. The dedicated pages record full current/original heads and metadata timestamps. Of 24 pages with recorded original heads, 21 heads are identical and three differ (#2965, #3014, #3058). #2977/#3028 omitted original heads, so their source-change status cannot be reconstructed from the old pages alone. A newer metadata timestamp does not prove changed code.

Upstream page GitHub state / draft Current head Change since original review Current action
#819 Open; not draft 3e633bbbc049 Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2929 Open; not draft 4316955c55ad Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2930 Open; not draft e53fd6f4857d Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2956 Closed, unmerged; draft 966416c9931d Same head; metadata refreshed Retired parallel candidate; follow #2988.
#2965 Open; not draft f0db53c49360 Changed head; review update required Review current timestamp order and retained hardware gap.
#2977 Open; not draft cc9546771924 Original head omitted Open proposal; refresh integration and focused tests before handoff.
#2984 Open; not draft cc576956ee5b Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2988 Open; not draft 8a6a4b87001a Same head; metadata refreshed Active upstream guard-set proposal; #2956 retired.
#2993 Open; not draft 98ab977bb75b Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2994 Open; not draft 781f5a560933 Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2995 Open; not draft 42cf316e59b0 Original head omitted Preserve opportunity; reopen only for an affected workload.
#2996 Open; not draft 4ab056ef5bfa Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2997 Open; not draft 9e9773a53e31 Same head; metadata refreshed Contribute missing conversion/lifetime tests; avoid duplicate packing.
#2998 Open; not draft 651079ce4de1 Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#2999 Open; not draft bf3f610d0518 Same head; metadata refreshed Review feature query/enablement separately from #3000.
#3000 Merged; not draft c53e813ec7a2 Same head; metadata refreshed Upstream history; fork equivalent present in stable and main.
#3001 Open; not draft 5b42f9c466a8 Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#3002 Open; not draft 873181abd5db Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#3004 Open; not draft d9dc31924b55 Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#3006 Open; draft a0e2d3e7ee0e Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#3010 Open; draft 2e39fed36955 Same head; metadata refreshed Follow #319 current-head border repair and stale B3/B4 diagnosis.
#3014 Closed, unmerged; draft d07fd5f8d75b Changed head; review update required Closed research; no verified rationale or replacement.
#3028 Open; not draft 792e00bd42bd Original head omitted Recover original self-page/SmartXX reproducer before qualification.
#3047 Open; draft 5b1c1404c55a Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#3051 Open; not draft 3b4c7f97f0f3 Same head; metadata refreshed Open proposal; refresh integration and focused tests before handoff.
#3058 Open; not draft 885319c94a4a Changed head; review update required Re-review new locking, callback context and unload sequence.

Dependencies and delivery boundaries

  • #2956 closed for #2988: use the author’s closure explanation, not two active parallel vertex-guard candidates. #2988 remains open; unchanged-byte comparison is only a possible follow-up.
  • #3000 merged; #2999 still open: supported SPIR-V target selection and required Vulkan feature enablement are different contracts. Independently checked fork target selection exists in both main and September 30 stable; the upstream merge commit itself is not a fork ancestor. See #3000’s source checks.
  • #2965 / #3058 changed source: re-review texture timestamps after submit-count advancement, and plugin locking/unload/asynchronous callback lifetime. The September reviews do not cover those later changes. #2965 retains the hardware no-semaphore agreement limitation.
  • #3014 closed without merge: no verified closing reason or replacement is asserted. Preserve the input-provider lifetime and freshness questions as research.
  • Fork source is independent: #317/#319/#320/#321/#351 remain open/HOLD or SKIPPED; #318 is closed/SKIPPED. None is a delivered main/stable feature. Their bounded next actions supersede the old port queue.
  • Retired product work: Shader Browser was removed by #268 before the checked stable release. Workbench #241/#259/#260 closed unmerged; #242 was superseded by #259. They are preserved branch research rather than current UI or upstream port promises. Neural, depth/color consumers, linear resampling and GP/HLE work also remain separately held.

No upstream comments, code submissions or native campaigns were made by this documentation refresh. Existing fork correctness fixes may still provide useful tests; each port needs an exact current upstream base, focused review and its own applicable qualification.

Historical upstream and code-priority reviews — September 21–26, 2026

The complete earlier review follows for provenance. Its old open-PR counts, source identities, active-candidate labels and Shader Browser port advice are historical, not today’s recommendation. Use the current table and delivery boundaries above.

This hub tracks open xemu-project/xemu pull requests that overlap or interact with work already implemented or tested in this fork. It exists to turn downstream experience into accurate, bounded upstream contributions.

Audit snapshot: 2026-09-21. Upstream had 104 open pull requests. Fork main was 82d04d84bdb3de956f20c3537e1da2cece0e8da2; reviewed upstream base was f9b14039e5bb56ae2d8f028e31e7cc19f13f7e12. This is source review and test-planning material, not proof that any branch merges cleanly or passes native qualification. Check each linked PR before posting.

Code-priority refresh: 2026-09-26. Fork main is 9a58e261; upstream master is still f9b14039. The upstream open-PR listing returned 112 PRs. The overlapping PRs named in the first-submission list below were rechecked as open. The older index and dedicated comparison pages retain their September 21 review scope; this refresh is a prioritized port plan, not a new full source audit or a claim that patches apply cleanly.

Best fork code to take upstream

Start with correctness repairs that can be reviewed as small changes and have a focused regression. Rank below weighs user-visible failure, applicability to upstream, and how much of the fork's implementation can be separated from fork-specific infrastructure. A merged fork PR is a source candidate, not an upstream-qualified patch. Where an upstream PR already exists, contribute a focused patch or test to that work after coordinating with its author; do not open a competing copy of the feature.

Order Fork code Why it matters First upstream action and acceptance gate
1 — prepare first #10 + #123: atomic PGRAPH array-packet preflight An oversized packet must not partially mutate draw state, including when bulk processing is off or tracing chooses the scalar path. Narrow correctness rule with a production-linked test. Coordinate a focused validation patch with upstream #2930's author, keeping upstream's bulk implementation. Test INLINE_ARRAY, ARRAY_ELEMENT16/32, exact capacity and one word over capacity in bulk, scalar and traced modes.
2 — prepare first #125: OpenGL GPU-surface reconciliation before vertex fetch A draw can consume stale vertex bytes when a GPU-authored surface overlaps the actual fetch range and the quick-upload path skips the changed data. Offer the checked fetch-span/readback and mirror-invalidation repair to upstream #2984. Test zero stride, element size versus stride, exact overlap and the production-linked surface-to-vertex case. Upstream's native-scale policy remains separate.
3 — high-impact correctness #119 + #158: Vulkan surface authority A stale cached-surface readback can overwrite newer guest writes and corrupt PGR2's menu texture. This is a user-visible data-authority failure. Extract the smallest guest-write notification and stale-readback veto series with an overlap/replacement regression. Compare with upstream #2965, which protects a different reuse boundary; do not call it a duplicate.
4 — reliability, split by subsystem #50: paused NV2A snapshot cleanup; #53: DSP quiescence before load Failed or already-paused snapshot operations must release ownership correctly; restored DSP state must not race the running audio thread. Compare the actual save/load hook ordering with upstream #819. Prepare separate graphics and audio patches, with paused save/failure cleanup and active-DSP load tests respectively. Do not treat #819 as equivalent without hook-level review.
5 — small correctness patch #138: initialize unused bump-uniform entries Reflected bytes that both renderers compare or copy must be deterministic even when the guest leaves stage zero unused. Check current upstream source, then submit only the shared-producer initialization and sentinel regression. This complements upstream #2998; its uniform-copy change did not create the pre-existing producer defect.
6 — focused Vulkan validation #104: transfer-source usage and BC staging alignment The depth scratch buffer lacked transfer-source usage, and a compressed-texture upload could start between BC blocks. The fork's validation removed those specific copy errors but did not resolve the investigated device loss. Upstream #2999 already addresses the transfer-source usage. Check current upstream source, then offer the distinct BC block-alignment fix and its focused copy test if still missing; run Vulkan validation on the upstream-based head.

Important code that needs a narrower upstream route

Fork work Recommended route
#70, #139, #147: persistent SPIR-V and pipeline caches High-value loading work, but upstream #2993 already proposes the feature. Lead with cache-key, bounded-load, worker-quiescence and Vulkan-recreation tests; port only a missing lifecycle repair after reviewing upstream ownership. No broad FPS claim follows from cache hits alone.
#228: learned Vulkan fallback readiness Important shader-stall work now merged in the fork. Separate the missing-stage request/retention and publication rules before proposing upstream patches. Its reported synchronous-work reduction had mixed frame tails, so qualify an upstream-based head before claiming game-performance benefit.
#75 + #76: GPU identity and cross-adapter presentation Potentially valuable multi-GPU compatibility work. First diff upstream's current device selection and presenter contracts, then test requested versus initialized GPU and incompatible-adapter host-copy fallback on suitable hosts.
Shader Browser #237, #238, #239 Merged opt-in debugging features, but the UI, persistence, recipe and override contracts form a larger series. Seek upstream design interest and propose stages before porting. Preview #241 and profiling #242 remain open drafts, so exclude them from a main-based port.

An exact-match overlap such as upstream #2994 should receive tests or review evidence instead of a duplicate fork patch. Keep unmerged APU experiments in the dated development snapshot until their own merge and qualification decisions are made.

How to use these pages

Each upstream PR has a dedicated page containing:

  • the refreshed upstream state and exact reviewed head;
  • the corresponding fork work;
  • which mechanism is equivalent, partial, alternative, or merely adjacent;
  • transferable tests and implementation lessons;
  • evidence limits and claims to avoid;
  • a suggested handoff that can be adapted into an upstream review comment.

No comment should be copied blindly. Refresh the upstream head, read new discussion, verify the referenced fork code still exists, and post only evidence that can be shared publicly.

Relationship vocabulary

Label Meaning
Exact mechanism The same core mechanism exists downstream; offer validation and edge cases rather than duplicate code.
Substantial overlap Most responsibilities exist downstream, but lifecycle, API, or ownership differs.
Partial overlap The fork covers only part of the upstream PR. State the uncovered portion explicitly.
Alternative strategy Both changes address the same hazard with different ownership or data structures; tests transfer more safely than code.
Adjacent hazard The changes concern the same subsystem but protect different directions or lifetimes.
Complementary Downstream work supplies integration tests or constraints but not the proposed feature.

Upstream PR index

Upstream PR State at audit Fork relationship Fork references Priority
#2993 — Persist pipeline and SPIR-V caches to disk Open Substantial downstream implementation overlap #70, #139, #147 Highest
#2998 — Derive uniform dirtiness during copying Open Core mechanism already present downstream; companion fixes available #138, #148 and current vk/glsl.h Highest
#2994 — Visit active LRU nodes without scanning every bin Open Exact mechanism already present downstream Current include/qemu/lru.h; #47 is separate High
#2930 — Consume INLINE_ARRAY vertex data in bulk Open Bulk path present downstream with stronger packet validation #10, #123 Highest
#2988 — Guard vertex RAM writes on what draws read Open Same lifetime problem; alternative downstream strategy #85, #89 Highest
#2956 — Finish only when vertex RAM updates affect pending draws Open Same lifetime problem; more precise upstream range strategy #85, #89 High
#2984 — OpenGL render-to-vertex-buffer support Open Partial overlap #125 Highest
#2999 — Enable required Vulkan features and buffer usage Open One direct overlap plus separate feature-negotiation work #104 High
#3000 — Compile SPIR-V for the supported device version Open Related target-selection and persistent-identity work #70, #75 High
#2965 — Flush when reusing Vulkan surface memory Open Adjacent coherence hazard, not duplicate #119, #158 High
#3010 — Native S3TC uploads and GL texture recycling Open draft Complementary compressed-layout tests #127 and existing OpenGL texture work Medium
#2997 — Speed up remapped vertex copies Open Complementary to bounded vertex lifetime work #85, #89 Medium
#3002 — Convert vertex attributes the device cannot consume Open Complementary feature; no equivalent downstream conversion claimed Vertex lifetime work and prewarm format admission Medium
#3006 — Convert unsupported inline vertex formats Open draft Third step in upstream vertex-conversion series #10, #123 plus vertex-range work Medium
#2996 — Size Vulkan storage buffers from device limits Open Complementary allocation work Related transient-buffer growth/failure-handling work Medium
#3004 — Retry a smaller Vulkan buffer after allocation failure Open Complementary allocation fallback Related transient-buffer growth/failure-handling work Medium
#3001 — Prefer standard Vulkan border colors Open Focused complementary sampler optimization No direct downstream equivalent claimed Medium
#3014 — Cached host input outside the BQL Open draft Complementary to virtual-controller presence repair #160 Medium
#2929 — Defer PGRAPH IRQ delivery from PFIFO Open Related lock-order work, distinct path #132 Medium
#3047 — DSP core and DMA performance/accuracy overhaul Open draft Complementary snapshot lifecycle requirement #53 Medium
#3058 — TCG plugin and monitor interaction Open Supports downstream profiling workflow Diagnostic counters and bounded performance protocol Medium
#3051 — Guest-visible xemu identification and version Open Useful for test identity; not a replacement for artifact hashes Release/version identity workflow Medium
#819 — Move snapshot surface download into savevm hook Open Older lifecycle overlap requiring hook-level comparison #50, #53, #119, #158 High

Best first review handoffs on existing upstream PRs

  1. #2993: cache lifecycle, identity, bounded loading, worker quiescence, and renderer-recreation coverage from #70/#139/#147.
  2. #2998: deterministic fragment-uniform construction from #138, while acknowledging upstream binding-switch handling; #148 remains a separate dirty-row optimization.
  3. #2984: exact vertex fetch spans, quick-upload invalidation after surface download, and the #125 production-linked test.
  4. #2930: whole-packet validation before bulk/scalar/traced path selection from #10/#123.
  5. #2988/#2956: three-generation vertex lifetime and rollover coverage from #85/#89.

These are focused review and test handoffs for existing PRs. The ranked code-submission plan above identifies what to extract from the fork first. Exact matches such as #2994 should receive downstream validation rather than duplicate code. Partial overlaps such as #2984 and #2965 must name what the fork does not cover.

Downstream reference commits

These are the merged fork PR identities observed during this audit. Refresh them if a PR is reverted or superseded.

Fork PR Merged commit Responsibility used by this audit
#10 c5a598a0ea42 Atomic oversized inline-packet rejection
#47 bac2cae991a2 Separate full-cache free-node scan optimization
#50 5151c3887a3f Paused snapshot save/failure cleanup
#53 bd1fecb93353 DSP quiescence before snapshot load
#70 fc8c5dec9c1a Persistent exact-source SPIR-V identity/reuse
#75 7c6a1a51fe84 Explicit selected-GPU identity/reporting
#85 ade1c546e338 Surface/vertex source freshness
#89 003b88475584 Bounded immutable vertex versions
#104 ef09f061d766 Transfer usage and depth/BC copy repair
#119 a179d9842046 Preserve guest writes over cached surfaces
#123 1fcf4434e933 Validate packets before bulk/scalar selection
#125 dcd0fa349b95 OpenGL surface reconciliation before vertex fetch
#127 08844c897bca Checked compressed cubemap face stride
#132 3cb55dffdd46 Renderer-switch lock/progress phase repair
#138 43f84505c295 Deterministic unused bump uniforms
#139 f929fe5a8bb1 Persistent SPIR-V in fallback preparation
#147 1b582a35b04e Persistent Vulkan driver pipeline cache
#148 ef1a7fc4b62b Aggregate VSH dirty-row state
#158 9c529ab612dd Stale surface-readback veto
#160 9f756c9ba036 Virtual controller without host provider

Upstream handoff workflow

  1. Refresh identity. Record upstream PR state/head, upstream base, fork main, and referenced fork PR merge commits.
  2. Recheck discussion. A new comment may already address the concern or invalidate the suggested path.
  3. Inspect the exact boundary. Compare ownership, lifecycle, cache key, state transition, or packet admission—not just similar filenames.
  4. Run the smallest transferable regression. Prefer production-linked unit/guest tests over unrelated gameplay volume.
  5. Separate claims. Label source review, controlled reproduction, native result, and unmeasured risk distinctly.
  6. Prepare a concise comment. Lead with the exact condition and test; link the fork PR or commit; state what the evidence does not prove.
  7. Do not post without maintainer authorization. This wiki prepares collaboration material; it does not authorize contacting upstream.
  8. Record the result. Update the dedicated page with posted-comment URL, upstream response, revised head, and disposition.

Comment template

I compared this head with downstream work at <fork commit>.

Relevant overlap:
- <exact mechanism or boundary>

Focused condition worth testing:
- <minimal sequence>
- expected: <invariant>

Downstream reference:
- <PR/test/commit link>

Scope limit:
- This establishes <specific result>.
- It does not establish <uncovered behavior or performance claim>.

Evidence rules

  • Never call a partial overlap “already implemented.”
  • Do not present one fork’s hardware result as a prediction for upstream users.
  • A source-level concern is not a reproduced native failure.
  • Keep historical performance results attached to the exact head they tested.
  • Alternative implementations transfer regression cases more reliably than patches.
  • Persistent cache identity must describe the complete compilation/driver compatibility request.
  • “Uploaded this batch” and “referenced by this batch” are different vertex-memory facts.
  • Surface coherence is directional: protecting pending GPU consumers differs from preventing stale GPU data from overwriting newer guest writes.
  • Guest-visible version strings supplement rather than replace host-side executable hashes.

Maintenance checklist

Update this hub when an upstream PR changes state, is rebased materially, splits, merges, or closes. On each dedicated page, update:

last checked date
upstream state and exact head
fork main and referenced merge commits
posted-comment/review URL, if any
upstream response and required follow-up
native or focused validation status
final disposition

Related pages

Clone this wiki locally