71 commits from 474ad59818 to 2cf8dabe6b, triaged rather than taken wholesale.
Declined, resolved to ours:
- AGENTS.md: upstream's AI-agent instructions; we carry our own and do not
want a second, conflicting policy file.
- CI deps bump (setup-node, labeler): both target workflows are absent here,
and the labeler job is gated on the repository being PCSX2/pcsx2.
- KDDockWidgets 2.4.1: two of the six files do not exist here; we already
build 2.4.0 against a 2.3.0 floor, so there is nothing to gain.
- The FullscreenUI Achievements-layout realignment: our section already
carries the same settings, and ours is the branded copy.
- The GS draw/vertex-buffer cluster (7887919e74, b2fa00844e, 99cfbb49c1,
5c611f85e1, 9945046a49, af48193ebb, d88510e3a6, 8c1bb5742e). Our vertex
kick is an ARM64 rewrite of the same hot path -- register-resident cursor,
fused min/max with a rewind watermark, and a scalar cull mirror that
dual-issues against the NEON parse -- so upstream's generic pointer-logic
optimisation is a variant of work already banked here, and their growth
restructure replaces per-buffer capacity with a single global value, which
the pooled draw-node model cannot express. Two of the four August commits
in that cluster repair regressions the July rewrite introduced, and the
third's genuine fix (staging arrays sized from an unrelated buffer) we had
already made independently.
Taken with adjustment:
- EATAN coefficients (aae9438f98). Upstream relabelled mVU_Globals so the
names match the powers; we had fixed the same defect by ordering the arm64
call sites by power instead. Both fixes are correct alone and CANCEL when
combined, so the arm64 call sites move to plain ascending order in the same
commit. The values never moved, so this emits an identical instruction
sequence. Their fix also repairs the x86 mVU we still carry.
- Shader cache version: upstream numbered their tfx.glsl change 109, which is
below our 110. Taking their value would hand every user a stale blob, so
this lands as 111.
- FullscreenUI: took the two readback-spin toggles, placed outside our
non-Apple guard rather than inside upstream's unguarded run.
- Restored tools/generate_fullscreen_ui_translation_strings.py, dropped by
431ca0c063, and regenerated both string areas. That also registers the Big
Picture setup-wizard strings, which had never been extractable.
GameDB: the three serials upstream gave gsHWFixes (SLES-53869, PAPX-90020,
SCPS-15064) are absent from the mobile overlay, so no fix is silently erased
on handhelds.
The script came over from yaps2 verbatim; the SDL job's build step
already produces bin/armsx2-sdl (rebranded frontend), so packaging
died at 'cannot stat .../yaps2-sdl' after an otherwise clean build.
The libretro + SDL handheld jobs wired into build-all.yml (fabccaa4fb)
call .github/workflows/scripts/linux/build-dependencies-runner.sh, but
the merge resolved .github/workflows/ wholesale to the ARMSX2 side and
dropped the script. Both jobs failed at Build Dependencies with exit
127 in run 29700912398. Its common/shaderc-changes.patch reference is
already present in this tree.
Merges yaps2/main (github.com/yaps2/yaps2, c16b88cb7) into ARMSX2,
replacing the arm64 recompiler family with the yaps2 JITs and importing
the yaps2 testing, perf, and libretro infrastructure. Common ancestor is
upstream PCSX2 342db5152 (2026-06-19); git auto-merged all but 38 files.
Replaced (deleted in this merge, recoverable from history):
- arm64/aR5900*, aR3000A*, aVU* -> arm64/iR5900*/iR3000A*/microVU*-arm64:
EE static-pin register file with lazy dirty tracking, dual-residence
allocator, IOP block linking, native COP2 macro ops, inline unaligned
fastmem, persisted VU program cache, call-ret shadow ring, VU0 spin
fast-forward.
- MVU_DIFF shadow-run hooks in shared VU interpreter TUs (superseded by
the offline vurunner JIT-vs-interp oracle).
Imported from yaps2:
- tests/ctest/core/recompilers: ~80 gtest suites (EE/IOP/VU differential
harnesses, fuzzers, ABI digest tripwire, capture format pins) plus the
gs_vertex_tests kernel oracle.
- pcsx2-vurunner / pcsx2-eerunner headless capture-replay runners.
- tools/perf counter-based A/B rigs, perf jitdump productionization,
PmuCounters, clang-perf/clang-handheld presets.
- pcsx2-libretro core (ENABLE_LIBRETRO, default OFF; rename pending).
- GS vertex-kick fast path (GV series): TBL-based packed parse,
register-resident kick, scalar-outcode cull, fused draw-rect/FindMinMax.
- Null renderer, VK_KHR_display direct WSI, swapchain PresentStats.
- SPU2 NEON mixer vectorization, EE timer read clamp (NFL 2K5 hang),
IOP ioman signed-compare fix, assorted UB fixes.
Kept from ARMSX2 in the both-touched files:
- iOS dual-map W^X and fastmem-unavailable resilience (Memory, HostSys,
vtlb). The split data/code area model is retained; both areas now take
fixed VA hints so cached VU JIT code stays deterministic on Linux.
- Android thread-affinity model, VMState shutdown early-outs, all
platform frontends, branding, CI, RetroAchievements identity/policy.
- GSDeviceVK: ARMSX2's push-descriptor decision logic (Mali crash gate,
proprietary-vs-turnip Adreno split) merged with yaps2's descriptor-pool
exhaustion recovery (flush + render-pass restart instead of dropped
binds). Vendor feature policy is the union: Mali fbfetch policy with
MediaTek/G57/Xclipse gates from ARMSX2; Adreno stencil/ROV/
test-and-sample-depth hang avoidance and no_ps2_z_quantization from
yaps2.
Build-system notes:
- The Qt debugger is now gated behind ENABLE_QT_DEBUGGER (default off on
arm64) so handheld builds drop the KDDockWidgets dependency.
- GSDeviceNone and remaining yaps2 GS code were ported to the newer
upstream GSTexture Usage-flags API.
The replaced backend's interpreter-fallback glue (intExecuteOneInst,
AndroidEEOpHist) and the EEDiffVerify runtime differ are retained for
now; dead pieces will be removed in a follow-up commit.
First arm64 CI run surfaced two breakages, both fixed here:
* Qt job died at apt install — libvpl2/libvpl-dev (Intel oneVPL) are
x86-only, absent on arm64. Root cause runs deeper: the deps ffmpeg
configure hard-enables libvpl/QSV/nvenc/ffnvcodec (all x86/dGPU), so it
can't build on arm64 either. Drop linked ffmpeg for the Qt build
(BUILD_FFMPEG unset, USE_LINKED_FFMPEG=OFF) and use PCSX2's default
runtime-dlopen ffmpeg — same as the SDL build, which already builds
clean. Remove the two libvpl packages. Also swap the patches download
from aria2c (missing on the arm runner image) to curl.
* SDL job built fine but its packaging cp'd $BUILDDIR/bin/resources,
which the no-Qt build never populates. Take resources from the
git-tracked source tree ($PCSX2DIR/bin/resources) in both packagers,
matching rocknix-deploy.
And, by request, the Qt build now emits BOTH a .AppImage (the classic
desktop format) and the portable .tar.zst from the same linuxdeploy
AppDir; the nightly publishes all three assets.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Follow-up to dropping those workflows: their support scripts were left
behind as dead weight. Remove scripts/{windows,macos,releases}, the
scripts/linux/flatpak manifest+modules, and the orphaned common/
update_base_translation.sh. Nothing the kept aarch64-Linux workflows use
references any of them. Also drops the last net.pcsx2.PCSX2 flatpak app-id
refs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Retarget CI to the only platform yaps2 targets: native aarch64 Linux,
built on GitHub's free public-repo arm64 runners (ubuntu-22.04-arm). Two
self-contained .tar.zst artifacts (no FUSE needed to run):
* yaps2-qt portable tarball (desktop / dev + Rocknix / Batocera, which
run Wayland). linuxdeploy + qt plugin bundle
Qt libs/plugins/rpaths into an AppDir which
we tar instead of wrapping as an AppImage;
launch via ./AppRun.
* yaps2-sdl handheld tarball (bare-kmsdrm handhelds; $ORIGIN/lib bundle of
the self-built libs, via build-dependencies-runner)
The SDL frontend presents via Vulkan VK_KHR_display direct-display (takes
over the display with no compositor — see pcsx2-sdl/Main.cpp), so it needs
no Qt/WSI deps; Rocknix/Batocera use the Qt build instead. Both builds are
forced to a 4K host page size for handheld compatibility. The push/PR
matrix builds both; a new scheduled nightly_release workflow builds both
and publishes them as a single rolling "nightly" pre-release on
yaps2/yaps2 (tag deleted+recreated each run so URLs track latest).
Also retarget the kept generic gates (GameDB lint) to the fork's main
branch and prune the cache-cleanup keys.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rename the two shipped application frontends' output files from pcsx2-qt / pcsx2-sdl to yaps2-qt / yaps2-sdl via OUTPUT_NAME. The CMake target names are unchanged, so the build graph, install() rules and ctest references keep working; only the produced binary file name changes.
Also repoint the Linux packaging that launches the app at the new name: the .desktop Exec, the AppImage BINARY/--executable, and the Flatpak command. The desktop app-id (net.pcsx2.PCSX2), window class, config dir (~/.config/PCSX2) and the dev/test runners are intentionally left as-is; a full display-name/app-id rebrand is a separate change.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>