Commit Graph

3076 Commits

Author SHA1 Message Date
Shokunin f14af5594d GL: opt-in PS1 dithering ([video] dithering = off|on|scaled)
The OpenGL renderer has always drawn shaded and texture-modulated pixels
at 8 bits per channel with no dither pattern (true colour). That stays the
default. 'on' applies the PS1 4x4 offset matrix and 5-bit truncation per
internal-resolution pixel; 'scaled' puts the pattern on the native grid,
so it reads like the console at any scale and the native VRAM is the same
at every internal resolution.

GP0(E1h) bit 9 reaches the backend through a new optional facade hook
(gr_set_dither) recorded for the render thread and Smooth motion redraws.
With the mode off nothing flushes and no uniform changes. Flat, raw and
other 5-bit-exact pixels are never touched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 23:41:40 -07:00
Matt Stanley 0b82ce5bf6 Merge pull request #638 from RetroPortingToolKit/fix/windows-scaffold-blockers
Fix Windows scaffold: BOM-less writes, native Python, configuring cmake
2026-10-12 23:36:41 -07:00
Matt Stanley 195f39be67 Merge pull request #641 from RetroPortingToolKit/fix/execution-identity-eol
Execution identity: hash source text with CRLF read as LF
2026-10-12 23:36:32 -07:00
Matt Stanley e6223c9c42 Merge pull request #648 from RetroPortingToolKit/fix/host-sampler-new-thread
host sampler: no pthread_self() in the SIGPROF handler on macOS
2026-10-12 23:36:26 -07:00
Matt Stanley 1f51d7e617 Merge pull request #650 from RetroPortingToolKit/fix/debug-savestate-slot-range
debug server: name an out-of-range savestate slot
2026-10-12 23:35:48 -07:00
Matt Stanley bb066b70d0 Merge pull request #637 from RetroPortingToolKit/fix/gl-scale-dup-stubs
tests: drop duplicate stubs in test_gl_scale_invariance.c
2026-10-12 23:35:12 -07:00
Shokunin 7dc8fdde9a debug server: name an out-of-range savestate slot
savestate save/load with slot >= SAVESTATE_SLOTS (12) was refused with the
generic message that blames LLE runs, which sent a test chasing the wrong
cause. It now replies "slot N out of range (0..11)". Guarded in
test_savestate_status_protocol.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:21:53 -07:00
Shokunin 7ef25d50ff host sampler: tell the emulation thread apart by stack, not pthread_self
SIGPROF can land on a thread that is still being created. On macOS arm64
pthread_self() there hits a pointer-authentication trap (EXC_BREAKPOINT in
on_prof), which killed debug-tools builds at boot when a second instance
started lobby threads. The handler now compares the interrupted stack
pointer with the emulation thread's stack range; Linux keeps pthread_equal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 11:36:26 -07:00
Shokunin 0cfc201e17 Execution identity: hash source text with CRLF read as LF
PSX_EXECUTION_ID hashed raw bytes of the contract files and generated
bodies. A Windows checkout with core.autocrlf=true (the Git for Windows
default) has CRLF in every text file, so a Mac and a PC build of the same
commits (R4 #35, psxrecomp 2a4824fc) got different identities and the
netplay content gate refused the session with "content mismatch". LF
files hash exactly as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:09:01 -07:00
Matthew Stanley 5237ff01fc Scaffold: commit game_options.toml; keep multi-disc probe files tracked
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-11 23:35:39 -07:00
Matthew Stanley 94ac3d37a8 update_disc_set: write in-project disc paths relative with '/'
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-11 23:34:13 -07:00
Matthew Stanley fa83aeb064 Fix Windows scaffold: BOM-less writes, native Python, configuring cmake for builds
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-11 23:30:47 -07:00
Shokunin d185dac101 tests: drop duplicate stubs in test_gl_scale_invariance.c
gpu_ws_background_requires_full_composite and gpu_timeline_note were defined
twice after a merge, so every GL fixture that includes this file
(gl_post_aa, gl_bloom, ...) failed to compile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:01:52 -07:00
Alex Vanderveen 2a4824fcb8 ci: check_bios_stamps defaults to the stamps present, not a fixed retail list
The default demanded SCPH1001.emitter.sha, which is gitignored (retail output
is generated from a dump, never committed), so every game's release CI failed
with 'SCPH1001.emitter.sha missing' on a clean checkout. Default to every
generated/*.emitter.sha; naming a stem still requires it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 16:22:12 -04:00
Alex Vanderveen c47f7391e8 fix netplay 2026-10-11 16:16:33 -04:00
Matt Stanley 68425a4add Merge pull request #629 from RetroPortingToolKit/playtest/mmx4-pr23-coop-compat
Retain X4 co-op support with current framework and account transport fix
2026-10-10 22:16:16 -07:00
Matthew Stanley f55a156c0b Adapt private sample-bank regression to guest-clock block mixer 2026-10-10 22:15:55 -07:00
Matthew Stanley a2cdcc0630 Pin merged first-request account networking fix 2026-10-10 22:12:50 -07:00
Matthew Stanley a633f8f435 Use account HTTP socket startup fix for first online sign-in 2026-10-10 21:12:22 -07:00
Matthew Stanley 9fcbf43e3d Keep per-primitive filtering and PGXP lookup consistent after co-op merge 2026-10-10 20:53:30 -07:00
Matthew Stanley 7dfef44598 Reconcile current master with validated X4 co-op support for PR23 playtest 2026-10-10 20:49:35 -07:00
Alex Vanderveen d008b914f1 bump 2026-10-10 23:36:57 -04:00
Matt Stanley 26b3878e78 fix: reduce CPU spin before high-refresh blended presents (#627) 2026-10-10 12:56:57 -07:00
Matt Stanley f9db2561d0 Fix persistent HD texture cache churn and missing live background dumps (#626)
* fix: reuse resident HD textures and publish live background dumps

* test: keep residency stubs local to the filtering fixture
2026-10-10 12:55:54 -07:00
Matt Stanley 19785e9f51 fix: guard ICE waiting-room helpers in offline builds (#625) 2026-10-10 12:55:50 -07:00
Matthew Stanley 4b96c039f6 Integrate current ICE lobby transports and preserve settled LAN boot settings 2026-10-10 10:53:54 -07:00
Shokunin 0b0641cbae Lobby: honour transport "ice" launches (same-NAT peers no longer dial themselves)
The lobby server starts a 2-player room the host relay cannot carry on ICE
(recomp-net-server start_transport, launch transport "ice"). This client
knew only "host" and the legacy server relay. It inferred a relay from
equal host/guest endpoints -- which is exactly what two peers behind one NAT
advertise -- and each peer dialled its own public address: the match stayed
at "linking" forever.

- psx_lobby_launch_transport.h: one pure decision (host / ice / relay /
  direct) with a unit test covering ICE, same-NAT endpoints, host relay and
  the legacy relay cases.
- PsxLobbyJoinInfo.transport_ice; the launch handler records it and never
  turns it into a relay; launch fill and resolve_use_ice start ICE p2p
  (signalled over the lobby) for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 10:37:31 -07:00
Matt Stanley 8cb420660e Merge pull request #624 from RetroPortingToolKit/fix/pgxp-qualified-defaults-20261010
Use dataflow-only PGXP defaults automatically in hook builds
2026-10-10 09:52:57 -07:00
Matt Stanley f17a946e6a Merge pull request #623 from RetroPortingToolKit/fix/native-wide-default-clipping-20261010
Make camera-plane clipping automatic with native-wide projection correction
2026-10-10 09:52:51 -07:00
Alex Vanderveen 1a8994ac0b Merge feat/ice-hub-relay: host relay over ICE for online rooms
Resolved against master: resolve_transport keeps master's single-agent
transport=ice launch (2-player rooms) ahead of psx_transport_decide; match_caps
JSON keeps the mod-plan fields and adds relay_via=ice; recomp-net bumped to
a48d355 (host_ice).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 04:20:24 -04:00
Matthew Stanley 8f6867225c Support independent co-op audio voices and diagnostic OSD rows 2026-10-10 00:53:39 -07:00
Matthew Stanley e7a059643c fix: select dataflow-only PGXP defaults in hook builds 2026-10-10 00:48:22 -07:00
Matthew Stanley ddbb979f18 fix: enable camera-plane clipping with native-wide projection correction 2026-10-10 00:48:17 -07:00
Matt Stanley 6fd3d1c326 Merge pull request #587 from RetroPortingToolKit/feat/gl-accurate-blending
GL: correct PS1 blending by default + blend/mask accuracy test
2026-10-09 23:56:33 -07:00
Matthew Stanley 1dd2afec07 Merge master and enable PS1 blend correction by default 2026-10-09 23:55:29 -07:00
Matt Stanley 6beb7d821b Merge pull request #621 from RetroPortingToolKit/fix/no-fp-contract
Runtime: build with -ffp-contract=off for cross-host determinism
2026-10-09 23:54:18 -07:00
Alex Vanderveen a15dc3944e Merge pull request #622 from RetroPortingToolKit/fix/lobby-ice-launch
Lobby: honour transport "ice" launches (same-NAT peers no longer dial themselves)
2026-10-10 02:22:21 -04:00
Alex Vanderveen 50b53cc6d0 Merge master into fix/lobby-ice-launch
Keep both new test targets in runtime/CMakeLists.txt.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 02:22:03 -04:00
Alex Vanderveen f68640b602 Merge pull request #620 from RetroPortingToolKit/fix/rb-multipeer-frontier
Netplay rb: per-seat peer frontier; retire a healed fork cap
2026-10-10 02:20:43 -04:00
Alex Vanderveen 9d6f0d4319 Merge master into fix/rb-multipeer-frontier
Keep both netplay_peer_frontier.h and netplay_fmv_confirm.h includes; advance lib/recomp-net to a48d355 (main, includes #38).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 02:20:17 -04:00
Matt Stanley eb4c76fc47 Merge pull request #586 from RetroPortingToolKit/feat/gl-xbr-filter
GL: opt-in xBR edge-directed texture filter (texture_filtering = "xbr")
2026-10-09 23:19:31 -07:00
Shokunin bd0425d7ab Netplay rb: re-anchor dirty-RAM IRQ poll stride each tick; av skips d24 helpers
- The dirty-RAM interpreter's IRQ poll stride is host-only; a load resets
  it to phase 0 while Live carried an arbitrary phase, so a replay could
  take the VBlank in RAM code at another instruction. It is now
  re-anchored at every tick boundary in Live and Replay alike.
- The av digest zeroes the three depth-24 present helpers at the end of
  the GPU snapshot (upload span, present hold, previous height): host
  presentation state a suppressed-present replay leaves different, not
  guest-visible.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:40:01 -07:00
Alex Vanderveen 1d2f4f95d3 sync 2026-10-10 01:38:54 -04:00
Alex Vanderveen c2408e5d9a sync 2026-10-10 01:38:54 -04:00
Matt Stanley 501a27c2fc Merge pull request #611 from RetroPortingToolKit/fix/fmv-confirm-lag
Netplay rollback: count post-movie agreement in confirmed ticks
2026-10-09 22:36:12 -07:00
Matt Stanley cf5bf1c88a Merge pull request #608 from RetroPortingToolKit/feat/mod-host-rumble
Mod API: title-supplied host rumble (psx_mod_set_host_rumble)
2026-10-09 22:36:08 -07:00
Matt Stanley 5a6527acc1 Merge pull request #605 from RetroPortingToolKit/fix/launcher-vsync-roundtrip
Launcher V-Sync row round-trips to [video] vsync
2026-10-09 22:36:04 -07:00
Matt Stanley 16758c1e24 Merge pull request #604 from RetroPortingToolKit/codex/mod-internal-resolution
Support session-only internal resolution requests from graphics mods
2026-10-09 22:35:59 -07:00
Shokunin c7d5b873cd Rollback snaps: the canonical machine at the tick boundary
PSX_RB_DET_SELFTEST on R4 4P showed a replayed save of tick T differing
from the live save of T. Each cause, and the fix:

- Replay's finish_frame poll passed no PC hint (Live used the IRQ resume
  chain); it now uses psx_netplay_snap_resume_hint.
- Devices are serviced lazily up to the next event, so root counters and
  cycles_since_vblank lagged the clock by a host-path amount at save; a
  load re-anchors them at the clock and drops the lag. The save now
  publishes pending cycle charges and services every device to the clock
  first, and renders the SPU up to it.
- GTE / mul-div completion stamps and the load-delay give-back were
  re-anchored at the restored clock on every load, so a stall in flight at
  the snap point cost the live run cycles but the replay none. New
  BS_SEC_CPUTIM carries them relative to the clock.
- The SPU CD-input FIFO was outside the snap and wiped on rollback loads;
  new BS_SEC_SPUCD carries the queued frames and the load keeps them.
- LZCR is serialized as derived from LZCS (the raw backing stays 0 until
  the first LZCS write; guests only ever read the derived value).

Older snaps without the new sections load as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:16:06 -07:00
Shokunin 0ae1725627 Netplay rb: Live and Replay tick snaps use one resume-PC rule
Replay's finish_frame saved its tick snap with no PC hint while Live used
the IRQ resume / last check / cpu->pc chain; the same tick's snap could
carry a different resume PC (psx_netplay_snap_resume_hint now serves both).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:15:57 -07:00