Commit Graph
32237 Commits
Author SHA1 Message Date
Dallin Bland 51b9967939 fix(recompiler): make invalidation process-wide and chain-safe 2026-09-19 23:05:03 -05:00
Dallin Bland 38638250bc perf(recompiler): retain unaffected AOT ranges across invalidation 2026-09-19 23:05:03 -05:00
Dallin Bland b79e8195de fix(tests): provide condition helper to generated AOT probes 2026-09-19 23:05:01 -05:00
Dallin Bland cef66973d3 fix(benchmarks): label representative execution backends 2026-09-19 21:32:07 -05:00
Dallin Bland c63dd6bc5c test(recompiler): keep branch probes on compiled paths 2026-09-19 21:32:07 -05:00
Dallin Bland f249340047 test(recompiler): expand instruction correctness and ARM64 sanitizers 2026-09-19 21:32:07 -05:00
Dallin Bland df766393ee fix(tests): include concrete performance metric types 2026-09-19 20:59:31 -05:00
Dallin Bland bf0dd77276 fix(tests): accept dynamic benchmark labels 2026-09-19 19:54:48 -05:00
Dallin Bland ffdff01fea test(recompiler): report shared AOT compile costs accurately 2026-09-19 19:54:48 -05:00
Dallin Bland c1b4e0eff1 test(recompiler): enforce benchmark backend guardrails 2026-09-19 19:54:48 -05:00
Dallin Bland 89ca3d6803 test(recompiler): sample representative memory after all slices 2026-09-19 19:54:48 -05:00
Dallin Bland a7b6258e19 test(recompiler): harden benchmark validation and timing 2026-09-19 19:54:48 -05:00
Dallin Bland 29accd93d1 test(recompiler): expand repeatable hybrid benchmark suite 2026-09-19 19:54:48 -05:00
Dallin Bland 6a380baf1a fix(tests): verify scheduler handoff through public API 2026-09-19 19:54:33 -05:00
Dallin Bland 8d15f5a249 test(recompiler): preserve pending SVC scenario ordering 2026-09-19 19:15:49 -05:00
Dallin Bland 7130b55a2a test(recompiler): exercise real PhysicalCore SVC dispatch 2026-09-19 19:15:49 -05:00
cleanthat[bot] f662f48a3c Add default Cleanthat configuration 2026-09-19 21:28:18 +00:00
Dallin Bland 8eca0b58cf docs: present drippu as suyu experimental edition (#33) 2026-09-19 16:28:04 -05:00
Dallin Bland 3e066e6282 build: fail early with a clear message when no working C compiler exists
The prerequisite check only looked for cmake and git. A missing or
broken C toolchain (no cc/gcc/clang on PATH, or a compiler that cannot
produce a working binary) was only discovered later inside cmake with an
inscrutable error, generating support threads.

Probe for cc/gcc/clang and smoke-test the first one found by compiling,
linking, and running a trivial program. Report exactly what is missing
and print per-platform install instructions.
2026-09-19 00:27:41 -05:00
Dallin Bland fffb9f523a chore(android): fix build scripts, flavor ABIs, CI workflows, and release signing
Consolidate the duplicate Android build scripts (the legacy one generated a nonexistent lowercase Gradle task name). Fix per-flavor ABI filters so chromeOS builds x86_64 only, move legacy sourceSets to the android extension, and align the compileSdk suppress flag. Repair the malformed JDK/cache step in verify.yml and drop the dead repo gate in android-build.yml. Add release-signing validation with debug-signed warnings, keystore secret wiring plus APK signature checks in release.yml, and update the Android build docs.
2026-09-17 21:07:31 -05:00
5de22d39fe Export Game: bake separate update/DLC dumps into the standalone snapshot (#29)
* feat(export): bake separate update/DLC dumps into standalone snapshots

Resolve base ROM plus picked update/DLC files and optional NAND-installed
add-ons through PatchManager at export time, so packaged exefs and
romfs.bin are the patched snapshot AOT recompiles. Dump decrypted AOC
next to the package and serve it from the deconstructed loader so the
standalone runtime does not need post-export NAND installs.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(export): rename AOC dir local to unshadow loader member

-Werror=shadow failed Linux tests and macOS MoltenVK: the baked-AOC
scan used a local `name` that collided with AppLoader_DeconstructedRomDirectory::name.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(export): fail closed on bake errors; honest ExeFS/AOC status

HOLD on PR 29: OnExport ignored session failures, directory ROMs could
claim an update bake after PatchExeFS(nullptr), empty exefs/ blocked the
Windows extract fallback, and aoc:u Count used the raw program id.

- Abort export on Resolve/ok()/unreadable extras; keep bake status
- Pass directory ExeFS into PatchManager; only list updates that applied
- Do not mkpath empty exefs/; extract fallback on all platforms; refuse
  DLC without main
- CountAddOnContent uses GetBaseTitleID like ListAddOnContent

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(export): refuse mixed directory+update snapshots; unbreak macOS

HOLD re-review on 363f352:

- Fail closed when an update is present but RomFS cannot BKTR without a
  Program NCA (directory dumps). Do not list Update over base romfs.bin.
- Do not create exefs/ for romfs.bin alone; never FillMissing unpatched
  main next to dumped AOC; honor extract/package failures.
- Drop static forward decls that Clang treated as extra overloads
  (DumpVirtualDir/ExtractExeFsFromRom ambiguous on macOS).
- Always remove .aot_work_* on export failure via RAII.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(export): drop unused ExtractRomFsFromRom; require PatchManager replace

- Delete dead static ExtractRomFsFromRom (-Werror=unused on ENABLE_QT=ON)
- Count update as applied only when PatchExeFS/PatchRomFS return a
  different handle than the base input, not a side NCA open
- Refuse-path status is the error only (not "base game only")

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* test(export): drop Core::System Resolve cases that SIGSEGV in CI

Linux tests on ea6d1a7 crashed in ExportContentSession Resolve after
System::Initialize. Keep header-only bake helpers; live Resolve still
needs a fuller emulator fixture.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(export): stop Linux tests spinning 1500s; refuse-path status is the error

CoreTiming tests busy-waited while(HasPendingEvents()) with no deadline.
346d452 hung after Catch2's seed line until CTest's 1500s default. Bound
that wait to 5s, cap the tests target at 180s, and stream --durations.

Resolve error paths now set status to the error (not "base game only").

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* test(ci): name Catch2 hangs; yield fiber handshake spins

346d452 Linux tests timed out at 1500s with only Catch2's seed line
because ctest captured stdout. Run bin/tests directly with -s /
--durations, split [export] vs the rest, and cap each at 30s/90s.

Fibers::InterExchange busy-waited on atomics with no yield; on a
2-vCPU runner that can starve the handshake. Yield and 5s deadline.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* test(ci): name Catch2 cases at start; fiber timeout yields home

Drop -s (lazy headers still hide hangs; RingBuffer -s floods Actions).
Print+flush the case name from a testCaseStarting listener; keep
--durations yes --order decl.

On InterExchange handshake expiry, YieldTo this thread's home fiber
and return so join() completes and REQUIRE_FALSE can fail closed.
Do not YieldTo the partner (fiber mutex deadlock).

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(core_timing): join host timer without a lost wakeup

Linux tests on a784eaf named CoreTiming[BasicOrderNoPausing] then
SIGTERM at the 90s GNU timeout. WaitForTimingIdle had already
returned; ~CoreTiming join hung because Reset Set() the events
before request_stop, so the thread could Wait() again with the
signal consumed. Stop first, then wake; skip pause_event.Wait
once the stop token is set.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
2026-09-17 20:40:37 -05:00
21a7fbd5c1 macOS: port MoltenVK Apple Silicon path + GPU init guards (#28)
* fix(macos): port MoltenVK Apple Silicon path and GPU init guards

Port applicable patches from dougchansan/suyu-v0.0.4#1 onto drippu:
bundled MoltenVK for the suyu target, recursive CAMetalLayer search in
the Qt frontend, SDL Metal layer (not NSView), and shared GPU/process
unwind guards. CMake targets remain suyu/suyu-cmd; the packaged artifact
is drippu.app.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(macos): create CAMetalLayer when Qt VulkanSurface walk is empty

VulkanRenderWidget still uses QWindow::VulkanSurface, which often leaves a
QContainerLayer and no CAMetalLayer. Walk the layer tree first, then
alloc/init a CAMetalLayer, setWantsLayer, and setLayer on the NSView.
Log critically if attachment still fails; vulkan_surface continues to
refuse a null layer.

Replace the dead USE_SYSTEM_MOLTENVK CI flag with YUZU_USE_BUNDLED_MOLTENVK=OFF
so release.yml matches brew molten-vk.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* ci(macos): PR MoltenVK smoke on Apple Silicon Qt path

Add macos-15 pull_request CI that builds suyu, suyu-cmd, and a focused
macos_moltenvk_smoke using the live Qt GetWindowSystemInfo CAMetalLayer
attach plus Vulkan metal surface creation. The job fails unless the log
shows MoltenVK device init. Also set SDL_WINDOW_METAL on the live SDL
Vulkan window and document brew vs bundled MoltenVK plus LIBVULKAN_PATH
for suyu-cmd.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* ci(macos): drive live VulkanRenderWidget MoltenVK device+swapchain

Fix Qt 6 void QWindow::create() so the smoke compiles. Host a
QApplication VulkanRenderWidget, snapshot InitRenderTarget WSI before
addWidget, load MoltenVK from suyu.app Frameworks with LIBVULKAN_PATH
unset, and require CreateDevice plus swapchain on that surface. PR CI
uses bundled MoltenVK (ON) and runs the binary from inside the app.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(macos): hide unused suyu-cmd recomp lambda from -Werror

place_one is only called from SUYU_CMD_STATIC_RECOMP and Win32 DLL
loaders. Wrap it and the usings only it needs so macOS -Werror=unused
does not fail suyu-cmd. Windows and static-recomp paths are unchanged.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(macos): link frontend_common into MoltenVK smoke

place_one is already ifdef-guarded. The smoke now compiles but fails to
link PlayTimeManager, which core's NS query service expects from
frontend_common (same as suyu-cmd).

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
2026-09-17 15:40:22 -05:00
b2bea3b2b2 chore: drop unbuilt Metal/MSL renderer; keep Apple SDL Metal window (#24)
* chore(video_core): delete unbuilt Metal/MSL and leftover sources

Remove renderer_metal and the MSL backend, which were never added to
CMake; CreateRenderer only constructs OpenGL/Vulkan/Null. Also drop
uncompiled leftovers in this area: dead macro/ and host1x ffmpeg/
duplicates, unused codec/sync/header files, unreferenced host shaders,
and the identity-removal pass that is never invoked.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

* fix(suyu_cmd): keep Apple SDL Metal window stub without renderer_metal

Apple CMake still target_sources emu_window_sdl2_mtl on APPLE. Deleting
those files would break a Mac suyu-cmd compile even though suyu.cpp never
constructs EmuWindow_SDL2_MTL. Keep the window class as a hook for a
future native Metal backend: SDL_WINDOW_METAL + SDL_Metal_CreateView,
no renderer_metal include. Live macOS path remains Vulkan/MoltenVK.

Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
2026-09-17 11:46:23 -05:00
d957dc4073 chore(core): drop unused nintendo/libretro and common leftovers (#25)
Remove unbuilt Nintendo/libretro scaffolding from src/core and orphaned
clock/logging/header TUs from src/common. Collapse game_settings to a
title-id switch, drop nintendo_library from core's link line, and fix
the malformed SPDX on src/common/CMakeLists.txt.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
2026-09-17 09:56:46 -05:00
5cb7fc7f3a Remove unused suyu GameLibrary, SocialSidebar, and Eden dialogs (#26)
GameLibrary/GameCard and SocialSidebar were compiled into suyu but never
constructed; live UI is GamerEnvironment. Eden data/deps/Ryujinx/migration
dialogs were copied into suyu and never wired. Drop those copies, the
qt_common_compat shim that only existed so they would link, and the unused
ProfilerWidget pointer.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
2026-09-17 09:49:53 -05:00