Commit Graph
40 Commits
Author SHA1 Message Date
libretroadmin a2de2322c8 Static Makefile, ParaLLEl GX2, and libretro-common for the network
The core builds with a static Makefile (Makefile + Makefile.common) in the
manner of the other ParaLLEl cores, for every target .gitlab-ci.yml has:
Linux x86_64/aarch64, Windows (MinGW, native or cross), macOS, iOS, tvOS,
Android arm64/x86_64 and webOS. CMake, vcpkg and their overlay ports are
gone; the libraries the core needs are submodules built with it (fmt
12.1.0, glm 1.0.1, glslang 15.1.0, libusb 1.0.29, pugixml 1.15, zlib
1.3.1, zstd 1.5.7), with the generated files and the graphic packs
produced by the Makefile itself (tools/pack_graphic_packs.c), and a
precompiled header for gcc and clang.

The core is renamed parallel_gx2 (parallel_gx2_libretro.info, library
name "ParaLLEl GX2").

HTTP and TLS go through RetroArch's libretro-common (net_http with the
per-request TLS settings, the built-in TLS client, x509, the hashes and
the KDF) in place of libcurl, OpenSSL and mbedTLS: dependencies/curl-compat
is the small libcurl API nlibcurl and napi use, on one transfer thread with
lock-free submission and per-handle event queues, with its own tests
against local HTTP and TLS servers, plain and under ASan/UBSan and TSan,
in both CIs. The libretro-common files are plain copies from RetroArch.

boost is replaced by the few headers the core uses (boost-compat), and
the CI files build with the Makefile.
2026-11-07 06:02:30 +01:00
WizzardSK c9ff2361c7 Stick Dead Zone options for player 1 and players 2-4
The GamePad's sticks went from libretro_get_analog_state straight into
vpad.cpp, past ControllerBase and its dead zone, so the slightest touch
moved them while a Pro Controller had Cemu's 25%. Two core options in
Controller, 0-50% in steps of 5, 25% by default as standalone: player 1
(the GamePad, applied in libretro_get_analog_state, or port 1's
controller) and players 2-4. LibretroController hands the value to
ControllerBase as its axis setting, so Wii Remotes and Pro/Classic
Controllers follow it too (demifiend9, NNshi).
2026-10-23 19:41:28 +02:00
WizzardSK a4462ccc4a README: status of 23 Oct 2026, Cheats category and Title Manager are done 2026-10-23 10:26:15 +02:00
WizzardSK dfe40329d1 README: the core's version at the top, last upstream sync 29f2f1fa 2026-10-23 10:25:22 +02:00
WizzardSK 1c675489bf GamePad touch screen: raw touch panel coordinates as standalone sends them, and a mouse cursor over the GamePad picture (NNshi, sco8487) 2026-10-23 06:54:35 +02:00
WizzardSK cec209b737 Core options overhaul (options-overhaul; NNshi): categories System, Graphics (Restart), Controller, Title Manager, Core, Logging, Graphic Packs (Restart), Cheats (Restart); the API in the names of single-API options; Vulkan by default; Auto follows the game profile for CPU Mode, Accurate Shader Multiplication and Precompiled Shaders; Accurate Barriers; add-on options only with their games; Upscale/Downscale Filter removed; Frame Wait an Off/On switch; options hidden again when declared 2026-10-18 10:33:01 +02:00
WizzardSK b0c0b99787 Frame pacing from swap-interval-fps: a 30 fps game reported as 30 (its swap interval followed), Frame Wait and Render Ahead One Frame options, Vulkan frames handed over once submitted, the software keyboard typed with RetroArch's keyboard, and the pipeline cache keeping what was compiled before closing (NNshi) 2026-10-17 12:13:38 +02:00
WizzardSK 8f1632fae9 Accounts: Rename Active Account - a name entry inside the core, by pad or keyboard, shown as the frontend's status message; Create Account says when the new account appears (account-rename; tested by Shoegzer, #28) 2026-10-13 23:38:27 +02:00
WizzardSK ba1314ca3c Account names: account_name.txt is written again when an account is made or removed (account-file-sync; Shoegzer #28) 2026-10-13 21:12:40 +02:00
WizzardSK bb95f9a522 Account name file: a line per account (<id> = <name>), written by the core with the accounts there are, so any account can be named and the ids need not be looked up; a name alone still names the active account (account-names; tested by Shoegzer, #28) 2026-10-13 06:40:04 +02:00
WizzardSK 6f3370c3f8 Account name from system/Cemu/account_name.txt: a core option cannot hold free text, so the account a title starts with takes its name from the file's first line, up to ten characters (from swap-interval-fps; Shoegzer #28, NNshi) 2026-10-11 21:24:37 +02:00
WizzardSK 0eafe69d7c GamePad Motion (System, off by default as standalone's): the GamePad's gyroscope and accelerometer from RetroArch's sensors on port 1, through upstream's motion handler; the README says how to make a DualSense's motion sensors readable under udev (gamepad-motion; tested by Shoegzer, #31) 2026-10-11 21:14:32 +02:00
WizzardSK 09c690d9a6 Disc images (#30): their keys beside them (<image>.key, removed with them by Remove Files After Installing), and the install and account option texts as Shoegzer worded them (#28, #30) 2026-10-10 14:48:10 +02:00
WizzardSK 2a5698b5e7 README: current setup, controls and status
Updates and DLC in system/Cemu/titles, the built-in graphic packs and their options, the device types per port, rumble and screen layouts, the iOS/tvOS/webOS builds, and a status section that says what is known not to work today instead of what worked in August. The install step copies the core under its own name.
2026-10-03 22:38:17 +02:00
WizzardSK 776f4fa205 Merge upstream Cemu up to 32e6628a: Latte shader and texture fixes
23 commits since the last sync: SAMPLE_G/SAMPLE_LB texture offsets, vertex export bursts, the shader loop regression, GX2 shader mode handling, MOVA overflow, cubemap slice copies, OSTicksToCalendarTime leap years, and nsysnet select starvation.

The core now reports its version as 2.6-341-g32e6628a (git describe against the v2.6 tag) instead of a bare 2.6.
2026-10-03 21:31:33 +02:00
WizzardSK af97e033bf No main branch: libretro is the fork's only long-lived branch [skip ci] 2026-10-03 20:47:31 +02:00
WizzardSK ef29126250 Drop the standalone's backends and keep them from coming back with upstream
None of these were built into the core any more; now they are gone from the
tree as well. Input comes from the frontend and audio goes to it, so SDL, the
DSU client, the keyboard provider, real Wiimotes over hidapi/BlueZ, the
GameCube adapter, XInput and DirectInput go, and so do cubeb (the submodule
with it), XAudio2, XAudio 2.7, DirectSound and the DirectX 2010 headers, the
Discord Rich Presence client, Feral GameMode and the ScreenSaver helper that
only SDL filled in. The code that stays loses the #if branches that named
them; the API enums keep their values, since config files store them. The
README's build steps lose the packages and flags only these needed, and
upstream's BUILD.md, CONTRIBUTING.md, CODING_STYLE.md and boost.natvis go
with the standalone they describe. libusb stays: nsyshid passes real USB toy
portals through to the game.

.upstream-excluded lists every path removed for being standalone-only, the
wx GUI included, and AGENTS.md says to run git rm --pathspec-from-file on it
right after merging upstream Cemu. That settles modify/delete conflicts in
favour of the deletion and also removes files upstream newly adds under those
paths, which git would otherwise bring in without any conflict.

Built on all seven targets plus iOS and tvOS.
2026-09-26 11:17:20 +02:00
Exzap 8a471c8933 docs: Move contribution guidelines to separate file + text tweaks 2026-09-10 13:27:23 +02:00
WizzardSK 3289b88e85 Libretro: say where the core comes from
The buildbot builds this branch nightly for every target the core has, so
the releases that were here are gone - they could only ever be older than
what RetroArch's own Core Downloader hands out.
2026-09-05 23:40:09 +02:00
i30817 a622ca878d Simplify MLC storage instructions in README (#14)
Agent hallucination from old commits the agent hallucinated too.
2026-08-31 20:21:04 +02:00
WizzardSK 2487ef3589 README: mlc01 is in the save directory, not the system one
Reported by @i30817 in #13, and the README was simply stale: libretro_init_paths
has taken mlc01 from RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY since the move off
system/Cemu/mlc01 - writable per-user data belongs in the save directory by
libretro convention, and that is where every save has been going.

Also says what happens when the frontend offers no save directory (the system
one, as before) and that "Sort saves by core" does not produce Cemu/Cemu, since
someone looking for their saves is the reason to read this line at all.
2026-08-31 17:58:39 +02:00
WizzardSK 089c665f48 Keep the frontend's Vulkan context across a video driver rebuild
cache_context was false, so RetroArch destroyed the Vulkan context whenever it
rebuilt its video driver - which a fullscreen toggle does mid-title. Every
object this renderer owns lives on that device, so the emulator carried on
against a dead one: before the upstream sync the GPU thread wedged on a lock,
after it the driver faulted, and each attempt at a fix moved the symptom rather
than removing it.

The crash report finally said so plainly once the handler recorded the guest
state before attempting a host backtrace (which faults here and swallows the
rest of the report): "no PPC instance on this thread" ruled out emulated code,
lr pointed inside libvulkan_freedreno and pc at an address that is not mapped
at all - the driver calling through an object that had been freed. PCEE2, whose
fullscreen toggle works, sets cache_context = true.

Verified: two toggles during NSMBU, RetroArch logging "Using cached Vulkan
context" each time, no crash and no GPU-park timeout.

This retracts the claim in the previous commit and in the README that
suspending the emulated CPU was the missing piece - it was not. The GPU pause
gate stays: it keeps the GPU thread off the frontend's objects while the
swapchain is swapped, and costs one atomic read per command packet.
2026-08-21 15:28:13 +02:00
WizzardSK 09bd279388 Park the GPU thread while the frontend rebuilds its context
RetroArch tears its graphics context down under a running title when the user
toggles fullscreen, and this core renders through the frontend's Vulkan device,
so everything it does during that window is undefined. Before the upstream sync
it wedged the GPU thread on a lock; afterwards it faults inside the driver, in
LatteQuery_UpdateFinishedQueries off the command processor's vsync handling.
Comparing against the pre-sync core showed the same toggle hanging it, so this
is not a regression from the merge - the merge only changed which way it fails.

The command processor now checks a gate at each command boundary.
context_destroy raises it and waits for the GPU thread to park; context_reset
releases it. The wait is bounded at 500ms and warns rather than blocking
forever: a frozen frontend would be worse than the race being closed.

This is not the whole fix. With the GPU thread parked the title keeps
executing, its GX2 calls go unanswered, and it can jump to a bad address -
observed as a guest-side fault after the toggle, where the crash used to be in
the driver. Suspending the emulated CPU across the teardown is what is still
missing, and that reaches into the coreinit scheduler.

README: drop the claim that fullscreen toggles are survivable - they are not,
and were not before this sync either. It is now written up as a known issue
with what is done and what is left.
2026-08-21 14:52:01 +02:00
WizzardSK 8036cea39c Re-query the frontend's render interface per frame; make LIBRETRO.md the README
The Vulkan present path kept using the retro_hw_render_interface_vulkan cached
when the renderer was built. RetroArch rebuilds its video driver behind the
core's back - a fullscreen toggle does it - and frees that interface without
calling context_destroy or context_reset, so presenting through the cached
pointer is a use-after-free waiting to happen. It now asks for the current
interface every frame and skips the present when there is none. (The same defect
was just diagnosed and fixed in the PCEE2 core, where it reliably crashed on the
frontend's F key.)

LIBRETRO.md becomes README.md, and it picks up what this sync changed:
submodules are required for the build (vcpkg lives in one, and configure fails
without it), the arm64/vcpkg environment, the extension-flag reconciliation on
the frontend's device, the process-exit path, SDL3, and a section on syncing
with upstream Cemu - remote, branch main, why this fork's own main is left
alone, and the four things that break every time. The key-file list said the
core still had a separate CemuLibretroLinux.cpp; it does not.

Note for future syncs: README.md exists upstream too, so it will conflict on
every merge from now on, where LIBRETRO.md never could.
2026-08-21 14:01:43 +02:00
Exzap a52c9bd74f README.md: Add LLM policy
This does not apply retroactively to pull requests which are already open
2026-06-10 17:28:55 +02:00
RedBlackAka 5a3809be16 windows: Add NSIS Windows installer (#1645)
License, user-install only and cleanups, mention in README
2025-09-05 12:40:51 +02:00
Exzap b390023bc5 README.md: Fix minor ambiguity 2024-03-08 14:48:59 +01:00
Exzap 14dd7a72a7 Add coding style guidelines and clang-format file 2023-09-14 20:52:40 +02:00
Michael d27935a1bd Update URLs related towards cemu_graphic_packs repo. (#764) 2023-04-13 04:37:53 +02:00
CrementifandExzap 6d75776b28 Add GDB stub for debugging (#657)
* Implement GDB stub debugger

Can be enabled by using the "--enable-gdbstub" option (and the debugger GUI, although that's untested) which'll pause any game you launch at start-up. Will start at port 1337 although it'll eventually be user-editable. The code is a bit weirdly sorted and also just needs a general cleanup, so expect that eventually too. And uses egyptian braces but formatting was easier to do at the end, so that's also something to do.

It has been tested to work with IDA Pro, Clion and the standalone interface for now, but I plan on writing some instructions in the PR to follow for people who want to use this. Memory breakpoints aren't possible yet, only execution breakpoints.

This code was aimed to be decoupled from the existing debugger to be able to be ported to the Wii U for an equal debugging experience. That's also why it uses the Cafe OS's thread sleep and resuming functions whenever possible instead of using recompiler/interpreter controls.

* Add memory writing and floating point registers support

* Reformat code a bit

* Format code to adhere to Cemu's coding style

* Rework GDB Stub settings in GUI

* Small styling fixes

* Rework execution breakpoints

Should work better in some edge cases now. But this should also allow for adding access breakpoints since it's now more separated.

* Implement access breakpoints

* Fix some issues with breakpoints

* Fix includes for Linux

* Fix unnecessary include

* Tweaks for Linux compatibility

* Use std::thread instead of std::jthread to fix MacOS support

* Enable GDB read/write breakpoints on x86 only

* Fix compilation for GCC compilers at least

The thread type varies on some platforms, so supporting this is hell... but let's get it to compile on MacOS first.

* Disable them for MacOS due to lack of ptrace

---------

Co-authored-by: Exzap <[email protected]>
2023-02-19 15:41:49 +01:00
UltraHDR 4014de622b Add macOS to README.md (#599) 2023-01-13 13:49:01 +01:00
Crementif cebdccfdf5 Update readme about matrix server
Supersedes https://github.com/cemu-project/Cemu/pull/245
2022-09-15 04:06:40 +02:00
Crementif 6cf5dc9a56 Add matrix server for non-discord chatting
Fixes https://github.com/cemu-project/Cemu/issues/113
2022-09-11 16:56:51 +02:00
uranuspucksaxophone 6dda53e84f Improve docs (#216) 2022-09-09 18:39:23 +02:00
TotalCaesar659 76313fc238 Update bug tracker URL to use HTTPS (#211) 2022-09-08 23:52:45 +02:00
TotalCaesar659 7b1f74b3d5 Update URLs to HTTPS (#44) 2022-08-25 15:33:12 +02:00
Exzap 0507e1ac89 Pasted the wrong URL. Whoops 2022-08-24 06:55:46 +02:00
Exzap 0e7389ee83 Add announcement post link to readme
Also testing CI builds with this commit
2022-08-24 06:48:07 +02:00
Exzap 560a2e536f Tweak readme 2022-08-23 05:56:08 +02:00
Crementif 736d529ea5 Expand readme with links and description 2022-08-23 02:37:05 +02:00