Skip to content

v0.14 — Fix the post-loadvm crash; texture bounds checks; retrained PGO

Choose a tag to compare

@github-actions github-actions released this 11 Oct 17:08

macOS (Apple Silicon) release; ad-hoc-signed xemu.app for macOS 14+.

A stability release: a long-standing crash fixed, renderer and CPU
fixes from a code review, dead experiment knobs removed, and the
profile-guided build retrained on the current code. No performance
change.

Changes

  • Fixed an occasional crash soon after loading a savestate, or during
    play, in the USB controller path. The cause was a use-after-free in
    the GPU surface-tracking list that USB transfers walk; upstream xemu
    has the same bug.
  • A malformed guest texture now stops the emulator with an error
    instead of reading past the end of video memory.
  • Surface uploads no longer reuse staging memory the GPU may still be
    reading (possible garbled textures or a corrupted video overlay).
  • A full occlusion-query pool no longer corrupts the next draw's render
    state; the capacity check now runs before per-draw setup.
  • After the guest remaps a code page, the CPU's return-address cache
    drops entries for that page (stale code was possible, never seen).
  • Profile-guided optimization retrained on this release's code; the
    previous profile dated from 2026-08-04.
  • Removed the off-by-default knobs XEMU_TB_RANGE_INV, XEMU_RETC_BITS,
    XEMU_X87_ELIDE_CLEAN, XEMU_PRESENT_DRAWABLE_FIRST, XEMU_HARDENING
    and XEMU_PGRAPH_MMIO_STATS.
  • Debug builds now run the Vulkan renderer's internal assertions;
    release builds are unchanged.

Validation: fps parity with v0.13.3 on the heavy savestate (31.05 vs 30.89 fps, 6 interleaved pairs, signs 3/3); 200-frame artifact soak through a Finder launch clean; the crash reproduced on demand before the fix (3/3) and not after it (120 savestate loads); CI green.

Full Changelog: v0.13.3...v0.14