Commit Graph

727 Commits

Author SHA1 Message Date
Matthew Stanley 56b6839602 Reject partial function override activation before session callbacks 2026-10-24 09:31:11 -07:00
Henrique Guedes 4cbedf5579 Add function overrides with guarded registration and cycle credit on current runtime 2026-10-24 09:18:57 -07:00
Matthew Stanley 910c47602c Merge branch 'master' of https://github.com/RetroPortingToolKit/psxrecomp into fix/held-746-20261022
# Conflicts:
#	runtime/src/main.cpp
2026-10-22 18:01:49 -07:00
Matt Stanley afc82849be Apply Internal resolution and Supersampling live from the in-game menu 2026-10-22 17:59:52 -07:00
Matthew Stanley 5a8ded2538 Reset applied video settings for each execution session 2026-10-22 17:41:08 -07:00
Matthew Stanley 3a2057c6f5 Merge remote-tracking branch 'origin/master' into fix/held-723-20261022 2026-10-22 17:25:07 -07:00
Matthew Stanley a2359ca095 Merge remote-tracking branch 'origin/master' into fix/held-737-20261022
# Conflicts:
#	docs/TCP_COMMANDS.md
#	generated/OpenBIOS.emitter.sha
2026-10-22 17:21:40 -07:00
Matthew Stanley 0980667752 Confirm live resolution allocation before reporting success 2026-10-22 17:03:12 -07:00
Matthew Stanley b69502386a Apply NVIDIA swap policy at worker and fullscreen transitions 2026-10-22 17:03:07 -07:00
Yves ebca6c5aaf Report XR readiness without the debug server 2026-10-23 06:53:57 +08:00
Shokunin 74c7cbf94a [video] supersample_disable_at_lines: drop SSAA on 4K/8K displays (opt-in) 2026-10-22 15:26:47 -07:00
Shokunin b1ce3be00a Live resolution: truthful restart contract per backend
Keep the requested internal resolution / supersample (shown and saved)
apart from what the backend last applied. When the live change is
unavailable (no GL, windowed high-resolution mode, CPU-authoritative dual
rendering, no context) or refused, the session scale is left as applied and
PSX_VIDEO_RESTART_RESOLUTION stays set, in both psx_video_apply_live and
the menu's restart bits (psx_host_video_restart_bits_backend, unit-tested
for the capable and refused cases). video_set rejects invalid presets and
factors without applying or saving, and reports applied values, capability
and pending restart. TCP command index regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:20:55 -07:00
Shokunin cb17f2f2d4 Windows GL vsync workaround: scope to the measured case
Narrow host_driver_vsync_unreliable() on Windows to the configuration the
stall was measured on: GL active, render thread running, GL_VENDOR NVIDIA,
not exclusive fullscreen. Other driver families and the unthreaded path
keep driver vsync; PSX_TRUST_DRIVER_VSYNC=1 still forces it everywhere.
Evaluated per call, so runtime renderer/fullscreen changes apply.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:17:33 -07:00
Shokunin 8003db07de Live resolution: keep the legacy factor as booted; video_set debug command
psx_video_current reported the live scale as the legacy supersampling
factor, so a second live change looked like a legacy edit and asked for
a relaunch. Report the boot value. Debug-tools builds gain video_set
(internal_resolution, supersample) to drive the live path in tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:55:28 -07:00
Shokunin 0aa83bac8c Fix the live-scale log line's newline
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:45:44 -07:00
Shokunin 37c1e5254c Apply Internal resolution and Supersampling live
Changing the internal resolution in the in-game menu did nothing until a
relaunch: ovl_video_from() never copied it, and the restart bits forced
a relaunch for it anyway. Supersampling (the [video] supersample
multiplier) had no player setting at all.

- PsxHostVideoSettings gains supersample_milli; internal resolution and
  supersample are live changes (PSX_VIDEO_LIVE_RESOLUTION). Only the
  legacy integer supersampling factor still needs a relaunch.
- psx_video_apply_live resolves the new scale and calls
  gl_renderer_set_internal_scale_live(): it moves the step ceiling
  (clamped like the boot scale) and queues the step through the dynamic
  resolution machinery, recorded in stream order with the render thread.
  The dynamic-resolution controller is retargeted to the new ceiling.
- settings.toml [video] supersample is the player's pick (1.0..4.0).
- The in-game menu round-trips internal_resolution and, with a launcher
  that has RECOMP_LAUNCHER_HAS_SUPERSAMPLE, supersample_milli.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:43:34 -07:00
PeriBluGaming b285f08f16 Widescreen: honor screen_x_sites in the dirty-RAM interpreter (#728) 2026-10-21 14:45:40 -07:00
Shokunin 44a51191d9 [video] match_display_max_lines: opt-in cap on Match display height (#722) 2026-10-21 14:45:27 -07:00
yacineolivier-maker 5c07d42f6a Present cadence: re-probe vsync when the guest video standard changes (#713) 2026-10-21 14:45:14 -07:00
Zap0xfce2 da0c98b936 feat(runtime): MEMCARD_SLOTS for titles that only use port 1 (#704) 2026-10-21 14:45:02 -07:00
Shokunin 594b507efd Windows GL: wall-clock pacing instead of driver vsync unless exclusive
Windowed or borderless, DWM composes the window and owns the display's
vsync, so a driver swap interval only adds a stall. On NVIDIA (RTX 4080
SUPER, 610.88) a vsync'd SwapBuffers holds the GPU queue the render
thread submits to: every render-thread frame cost a full refresh
(16.7 ms "GPU" at any internal scale, render_busy 100 %), back-pressure
slowed the guest to 52-57 Hz, and dynamic resolution dropped for
nothing. Measured on R4 0.8 at 7680x4320, windowed and borderless: guest
60.0 Hz, render_busy 5-8 %, GPU 4.4 ms. Exclusive fullscreen keeps
driver vsync; PSX_TRUST_DRIVER_VSYNC=1 restores it everywhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 16:02:19 -07:00
Matt Stanley 916da6f80d Integrate shared disc tray with the maintained menu provider (#652) 2026-10-19 18:13:38 -07:00
Matthew Stanley ee9e464fd0 Preserve stock-frame VSync on faster displays 2026-10-19 18:02:47 -07:00
Matt Stanley 13b7f81d29 Add guarded instruction variants fixed during offline mod activation
Keep selector zero stock and seal all choices until the next session restart. Refuse nonzero online activation, scope non-stock save states by frozen choices, and preserve original instruction guards when combined with effective-address adapters. Use overlay ABI34 on current master without the old menu dependency stack.
2026-10-19 16:37:32 -07:00
Matt Stanley c0ffd6d4c5 Support guarded mod address adapters and atomic extended memory cards
Extract the audited adapters and card transport onto master without the held selector/menu stack. Keep adapters and codecs tied to mod activation, use overlay ABI 33, retain rejected-load protection on codec registration, and refuse extended-card codecs in netplay before frame zero. Preserve default atomic save publication and guest-visible write failures.
2026-10-19 16:00:11 -07:00
Matt Stanley bc574c5700 Isolate runtime publication and wall-time diagnostics from held mod selector stack 2026-10-19 14:07:22 -07:00
Matt Stanley da9029a73a Merge current master and qualified review fixes into PR #408 2026-10-19 13:09:25 -07:00
Matt Stanley cda860fe74 Merge current master and qualified review fixes into PR #670 2026-10-19 13:09:14 -07:00
Matthew Stanley db596520ab Record real renderer activity and explicit playtest verification coverage 2026-10-18 20:55:22 -07:00
Matthew Stanley 6bc150c85c Restore device profiles when developer pad injections finish 2026-10-17 09:53:22 -07:00
Matthew Stanley cf9bf1f9fd Allow developer pad injections to exercise serial hotplug 2026-10-17 09:40:22 -07:00
Matthew Stanley fedb5319d2 Support scoped modern controls and replay controller presence
Keep temporary keyboard profiles separate from saved bindings. Add optional persistent mouse capture with ordered release/focus/reset handling, and let offline sources represent an unplugged port without falling back to physical input. Existing capture and source defaults remain intact. Beads: beads-9wg8 and beads-eio.19.18.
2026-10-17 09:19:31 -07:00
Shokunin b279afdc4a In-game presets: draw-thread-safe callbacks and a coherent menu seed
P1: quality_launcher_apply is now a pure preset -> rows mapping
(psxq::rows_from_runtime plus startup constants); it never writes the live
globals. The in-game menu publishes only thread-safe callbacks: that
mapper, and a re-detect that returns this session's detection (a fresh
probe needs the GL context and mutates the run's state, so it stays in the
pre-game launcher). Summary/reason strings and the detection are fixed on
the main thread at menu setup; settings_get reads only the main-thread
snapshot.

P2: psxq::MenuSelection keeps what the player selected versus what is live.
A pick's next-launch rows and netplay-deferred rows stay selected for the
next seed until the live value matches; other rows follow live. The host
classification moves to psxq::classify_launcher/row_differs (same rules).

Tests: quality_presets_test test_ingame_menu_host_path runs the review's
fixture through the host get/pick/apply/save path (Ultra -> High, then
Antialiasing = NONE; a governed edit is still Custom from High; a netplay-
deferred row stays selected). menu_quality_callbacks_test guards the
draw-thread callbacks against runtime writes and stateful calls.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 19:09:49 -07:00
Shokunin aaeefc59f1 In-game menu: the Graphics preset row (same contract as the launchers)
mh_launcher_game_info publishes the presets (quality_fill_game_info),
mh_launcher_settings_get seeds the preset and the governed rows as in
force, and an applied menu change goes through quality_take_launcher, so
a pick or a governed edit is settled by the same save transaction
(settle_save) as the launchers. Shown rows apply live; preset-only keys
at the next launch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 14:53:45 -07:00
Matt Stanley 379565a6ff Merge pull request #673 from RetroPortingToolKit/feat/texture-filter-catalog
Launcher handoff: hand every frontend the texture-filter catalog
2026-10-15 13:56:46 -07:00
Matthew Stanley 50958497c4 Integrate merged experimental wheel support before preset validation 2026-10-15 13:49:46 -07:00
Matthew Stanley a6ee3aa062 Integrate current master and canonical BIOS stamp for PR609 validation 2026-10-15 13:40:27 -07:00
Shokunin 8be777f1f1 quality presets: a supported key set, host-side Custom classification
- [quality.*] accepts only the supported keys (quality_key_supported):
  twelve player-editable ones (masked, copied, classified, applied) and
  nine preset-only ones (no settings.toml form; applied on select). Any
  other key, e.g. vsync or renderer, is a load error.
- Picking a preset now also applies bloom, texture LOD, anisotropy, FMV
  chroma smoothing and dithering (quality_apply_video_globals).
- The frontends flag Custom on any tracked row; the host counts only rows
  of keys the title governs (psxq::launcher_custom_edit), so Antialiasing
  no longer turns Ultra into Custom when no preset sets it.
Tests cover the rejection, every player key's masking/copy, and the
classification cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:57:27 -07:00
Shokunin c9c49c64d7 Launcher handoff: the texture-filter catalog for every frontend
Hands the launcher game info (pre-game launcher, soft return, and the
in-game menu's launcher_game_info) the [video] texture_filtering
vocabulary {Nearest, Bilinear, xBR} = PSX_TEXTURE_FILTER_{0,1,3}, so
frontends keep xBR across startup and soft return instead of collapsing
it to Bilinear. Needs a recomp_launcher.h with
RECOMP_LAUNCHER_HAS_TEXTURE_FILTER_CATALOG (recomp-ui); without it this
is a no-op.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:56:41 -07:00
Matthew Stanley 6d3c5308a7 Integrate current master and canonical BIOS stamp for preset re-review 2026-10-15 08:34:17 -07:00
Matthew Stanley 9f88c128f4 Preserve the selected preset base when launcher edits become Custom 2026-10-15 08:33:23 -07:00
Matthew Stanley c91331ff67 Isolate save slots for verified mod content plans 2026-10-15 01:50:14 -07:00
Shokunin ab49f294e9 quality presets: one preset/key-ownership transaction for every settings save
The boot launcher, soft-return launcher and the in-game menu's live
settings now save settings.toml through psxq::settle_save:
- a one-run PSX_QUALITY override never persists: governed keys and the
  quality_* keys come from disk, so the previous preset or Custom values
  survive even when the boot seed was built empty;
- a governed live edit (psxq::live_edit) or launcher Custom becomes
  Custom from the current base, with the edited values, and survives
  restart instead of being masked away;
- a launcher pick records the preset; unrelated edits keep it.
Tests reproduce both review cases through a settings.toml round trip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:05:25 -07:00
Matthew Stanley d110d0a423 Integrate current master for reviewed PR597 and retain canonical BIOS stamp 2026-10-15 00:36:07 -07:00
Matt Stanley d550ddf2e9 Merge pull request #590 from RetroPortingToolKit/feat/idle-skip-store-counters
idle_skip: elide store-counter wait loops (PsyQ v_wait), opt-in
2026-10-15 00:34:00 -07:00
Matt Stanley 9521343200 Merge pull request #664 from RetroPortingToolKit/fix/menu-host-followups
Menu host follow-ups: restart bits for touched groups, local return, recomp-ui default provider
2026-10-15 00:33:44 -07:00
Matthew Stanley d946aec09a Integrate current master for reviewed PR597 and retain canonical BIOS stamp 2026-10-15 00:00:06 -07:00
Matthew Stanley 80674e4d9f Integrate current master for reviewed PR593 and retain canonical BIOS stamp 2026-10-14 23:59:50 -07:00
Matthew Stanley 2d2c1849f3 Integrate current master for reviewed PR591 and retain canonical BIOS stamp 2026-10-14 23:59:13 -07:00
Matthew Stanley e0800a28e0 Integrate current master for reviewed PR590 and retain canonical BIOS stamp 2026-10-14 23:58:57 -07:00