You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Window Size presets (native only) — View → Window Size offers 1x/2x/3x/4x (100%-400%) of
the SNES native resolution, matching RustyNES; the app now launches at 3x by default instead of
a fixed 512x448 window.
Libretro peripheral negotiation — rustysnes-libretro now offers Mouse (both ports) and
Super Multitap / Super Scope (port 2) via RETRO_ENVIRONMENT_SET_CONTROLLER_INFO, mirroring
bsnes's own libretro core's per-port device menu.
emu-thread mechanical re-sync — cheats, watchpoints, breakpoints, port2-peripheral
selection, and per-voice audio mutes now apply in the threaded build too (previously only the
synchronous drive path saw these changes).
emu-thread run-ahead + netplay-aware pause — run-ahead now runs on the emu thread via crate::rewind::step_with_run_ahead, only when actually configured (matching the synchronous
path's own run_ahead > 0 branch, avoiding an avoidable per-frame allocation in the common
disabled case — caught in PR review); netplay now actually functions under emu-thread (its NetplayState::drive call was previously dead code there, so netplay was silently
non-functional in threaded builds), pausing the emu thread TOCTOU-safely via a new EmuControl::netplay_paused flag re-checked under the shared EmuCore lock. PresentBuffer
now carries the framebuffer's (width, height) alongside its bytes, and the present path tracks
the dims that actually match its staging buffer (Active::present_dims) rather than the emu's
live (possibly-moved-on) resolution, so a run-ahead-peeked frame can never publish bytes for one
resolution against dims from another (also caught in review). emu-thread is now clippy- and
test-gated in CI for the first time (previously referenced only in a comment). Movies, Lua
scripting, RetroAchievements, and rewind-recording remain intentionally unported to emu-thread
— confirmed via RustyNES's own reference implementation, which doesn't port these to its thread
either.
Fixed
Fullscreen crash on monitors wider/taller than 2048px — Gfx requested wgpu::Limits::downlevel_webgl2_defaults() unconditionally on every target, capping max_texture_dimension_2d at 2048 even on native GPUs that support far more. Fullscreening on
e.g. a 3440x1368 ultrawide made Surface::configure receive an out-of-range request and
panic/abort (wgpu::Surface::configure has no recoverable error path here). Native now requests downlevel_defaults() and both targets call .using_resolution(adapter.limits()), raising the
floor preset to match the real adapter; the granted limit is tracked at runtime and enforced
everywhere the old hardcoded 2048 constant was.
Open bus during DMA/HDMA transfers (the "Speedy Gonzales stage 6-1" mechanism) — DMA/HDMA
reads now update the open-bus latch, matching real hardware; writes deliberately do not, per a
direct cross-check against ares' and bsnes' own CPU::Channel DMA implementation. superfx_boots_live_and_deterministic's 24 golden hashes were re-blessed with that citation
trail as justification — see docs/scheduler.md §Open bus via DMA/HDMA.