Commit Graph
39 Commits
Author SHA1 Message Date
libretroadmin f1208a7a5a Make threading lock-free
The core and the headless tools no longer use mutexes, condition variables,
spinlocks, std::atomic, std::thread or volatile flags. Threads hand off through
libretro-common's retro_atomic and rthreads plus a few small pieces on top of
them in Common/Thread: Thread, MpscQueue, EventCounter, ParkingLot waits and
ReaderGate. Every wait blocks until it's woken; nothing polls on a timer.

State that only one thread touches just loses its lock. The PSP filesystem,
sceIo and the savedata dialog now belong to the emulation thread: async reads
and writes run when they're queued and complete later in emulated time, and
the IO and savedata threads are gone. The friend finder only talks to the
adhoc server and hands what it gets to the emulation thread. GPU init always
runs on the thread that starts the game.

The Vulkan render and compile queues, pipeline and render pass caches, delete
list and SPIR-V cache, the GL render queue, the software renderer's jit caches,
the file loader caches, the web debugger, UPnP, input, savestates, logging and
the GE debugger all hand off through queues and atomics. The IR jit's spinning
profiler thread goes.

A CPU thread with nothing to run now sleeps until work is queued instead of
spinning. Headless with --debugger waits for a client while stopped, and ends
the run once every client that connected has left. Web server shutdown keeps
servicing the CPU queue until the server has finished.
2026-10-09 04:56:16 +02:00
libretroadmin 9f13f0f051 Remove sleeps and timed polling from the emulation and render paths
The core no longer sleeps to pace itself: the frontend runs retro_run at
its own rate, so the frame throttle, the idle-vblank delay and the real
clock sync event (and its core option) are gone, and a stepping CPU hands
straight back instead of waiting 2 ms. Waits that polled now park on a
lock-free eventcount through Common/Thread/ParkingLot and are woken by
whoever changes the state: a paused GL emu thread, which also queues a
marker behind its last frame so pausing runs the render queue up to it
instead of polling; async I/O results; the software renderer when its
queue is full; Vulkan pipeline compiles; and debugger requests once
stepping ends. Boot joins the loader thread, cache shutdown joins its
read-ahead thread, and the slow-I/O simulation is removed.

The path browser, the HTTP and WebSocket servers, the Windows console and
the game info cache are left out of the core build. libretro/test gains
lrgltest, which drives the GL backend on a surfaceless EGL context through
every path that pauses or stops the emu thread; run.sh and the image
checks CI job run it on llvmpipe.
2026-10-08 17:58:42 +02:00
Henrik RydgårdandClaude Opus 5.5 24017a1ba4 GE debugger: Fix the stepping request handshake
- Wait on actionComplete instead of a bare condition variable wait, which
  could miss the wakeup and hang until resume.
- Serialize requesters, so two debuggers can't overwrite each other's
  action, and make SetCmdValue/FlushDrawing wait too.
- Give up and withdraw the request when stepping ends, instead of waiting
  forever (this deadlocked game shutdown against the Win32 GE debugger).
- Run requests during CPU stepping, which already accepted them.
- Clear the stepping state on Core_Resume from GE stepping and on
  GPU_Shutdown.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 09:49:10 -06:00
Henrik Rydgård 1b2f87bf1a Rename GPUgstate to GEState 2026-07-02 20:34:09 +02:00
Henrik Rydgård a317890c08 Remove the GPUDebugInterface class
Just a pointless extra layer in the class hiearchy, making it
unnecessarily hard to modify the interface.

Might as well hit GPUCommon directly.
2026-06-02 11:15:08 +02:00
Henrik Rydgård dda3ddf6b0 Simplifications 2024-12-15 16:09:42 +01:00
Henrik Rydgård 11dbae3457 Remove the "DispatchFlush" mechanism, not convinced it's a win 2024-12-15 13:42:05 +01:00
Henrik Rydgård 638607d29a Refactor: Make GPUCommon own the framedump "recorder". 2024-12-15 12:07:44 +01:00
Henrik Rydgård 68f61c2add ImGeDebugger: Highlight changes, show old value on hover 2024-12-14 11:03:18 +01:00
Henrik Rydgård a858032e46 Remove obsolete accounting for time spent stepping the GE (we no longer block) 2024-12-12 18:54:46 +01:00
Henrik Rydgård e3aaf93e28 Add a new log category 2024-12-10 10:34:26 +01:00
Henrik Rydgård 11819e87cf PauseAction readbacks now work again 2024-12-05 00:36:49 +01:00
Henrik Rydgård 9ed8d8871e Ge stepping without wait: Tex/Prim stepping works. Draw/Single have issues. 2024-12-05 00:36:48 +01:00
Henrik Rydgård 96c4a10e8c Add two new core states, rename RUNNING to RUNNING_CPU and similar for stepping. 2024-12-01 21:04:21 +01:00
Henrik Rydgård 3a5968ba33 Don't block the render thread while the CPU is paused. This is a prereq for imgui debuggers. 2024-11-05 12:53:21 +01:00
Henrik Rydgård e01ca5b057 Logging API change (refactor) (#19324)
* Rename LogType to Log

* Explicitly use the Log:: enum when logging. Allows for autocomplete when editing.

* Mac/ARM64 buildfix

* Do the same with the hle result log macros

* Rename the log names to mixed case while at it.

* iOS buildfix

* Qt buildfix attempt, ARM32 buildfix
2024-07-14 14:42:59 +02:00
Unknown W. Brackets 416265431b GE Debugger: Display if tex is framebuf.
Rather than guessing based on size, let's show explicitly.
2022-10-10 22:35:42 -07:00
Unknown W. Brackets 71e855a822 GE Debugger: Track last gstate on stepping. 2022-02-13 10:22:59 -08:00
Unknown W. Brackets e47ee79899 GE Debugger: Allow GPU stepping while CPU stepping.
This can happen if you step into an update stall address call or similar.
2022-01-23 23:06:33 -08:00
Unknown W. Brackets eb95b99523 GE Debugger: Add option to auto flush.
This makes it easier to see what's happening in each draw.
2022-01-22 13:12:59 -08:00
Henrik Rydgård 989e353482 Common.h shouldn't include Log.h.
Buildfixes

More buildfixes. Move JSON code to common.
2020-10-04 11:42:14 +02:00
Unknown W. Brackets 4d5c8fcff4 GE Debugger: Track a counter of prims. 2018-12-01 06:26:35 -08:00
Unknown W. Brackets f1afc51994 GE Debugger: Refactor out stepping callback.
In case we have multiple connected debuggers, we don't want just a
callback.  A counter works fine.
2018-09-01 09:41:20 -07:00
Unknown W. Brackets e6917cccf6 Debugger: Add APIs to retrieve render image. 2018-06-16 15:33:02 -07:00
Unknown W. Brackets a0608d7fc5 Debugger: Allow GPU actions while stepping.
This allows pulling the display/target while paused.  It may also allow
other actions that work outside a display list.
2018-06-16 13:57:45 -07:00
Unknown W. Brackets 0ed2c03350 GE Debugger: Prevent hang on shutdown.
Since we're blocking the Emu thread, we can't use a hook from the Emu
thread to wake up.

The change to lifecycle callbacks caused this.
2018-06-11 14:54:42 -07:00
Unknown W. Brackets e313a9bf6c Debugger: Lock startup/shutdown for threadsafety.
Otherwise things can get freed while we're trying to inspect them.
2018-06-06 05:58:49 -07:00
Unknown W. Brackets e9cc1ee463 Debugger: Allow multiple clients more properly.
Otherwise we lose wakeups and hang.
2018-06-06 05:58:49 -07:00
Henrik Rydgård 440e72d250 Clean up among the logs. Remove MASTER_LOG. 2017-03-06 13:10:23 +01:00
Henrik Rydgard d46397627e Buildfixes 2017-02-28 11:40:29 +01:00
Henrik Rydgard 26a2d42731 Big mutex overhaul - remove our custom ones, make them non-recursive where possible 2017-02-28 11:40:29 +01:00
Unknown W. Brackets fa0e88f1b7 Add a flag to use the display vfb for screenshots.
This fixes proportions of reporting, savestate screenshots, and TAS
recording for PS1 ports, mainly.
2016-09-25 16:32:18 -07:00
Unknown W. Brackets c6ffed6484 gedbg: Add mechanics to grab CLUT buffer. 2016-01-10 09:25:19 -08:00
Henrik Rydgard cde585a29a Include dependency cleanup 2015-07-29 11:48:20 +02:00
Unknown W. Brackets eaf3288304 Add debug interface for non-L0 texture preview. 2014-06-15 09:30:37 -07:00
Unknown W. Brackets 03f86f364f Skip debug stepping time in list/func time.
Just makes the debug stats actually useful while stepping.  A bit of
overengineering, but it makes it easy to go frame-by-frame looking for
perf issues.
2014-06-14 08:42:18 -07:00
Unknown W. Brackets dad1bf41f7 Avoid making FBO copies in the debugger.
When it binds the texture preview.  Not needed.
2014-06-13 08:35:12 -07:00
Unknown W. Brackets fc7b5f3141 Make sure not to break when GE debugger closed.
Also, try to fix a might-be race condition.
2014-05-15 22:45:51 -07:00
Unknown W. Brackets dc91bf2ca3 Move GPU debug step/pause/messages out of Windows/. 2013-10-12 10:03:31 -07:00