Commit Graph
161 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
Henrik RydgårdandClaude Opus 5 70095e458b thin3d: add sub-rectangle texture updates, use them for imgui fonts
imgui 1.92 hands the backend a list of dirty rectangles when its font atlas
grows, but thin3d could only replace a whole mip level, so every new glyph
re-uploaded the entire atlas.

Adds DrawContext::UpdateTextureRegions, taking a batch of regions so each
backend can submit them together:

- Vulkan: packs the regions into the push pool and issues a single
  vkCmdCopyBufferToImage from the init command buffer, transitioning only
  the level being written.
- OpenGL: new TEXTURE_SUBIMAGE init step. The existing sub-image path is a
  render command needing an active render pass and a texture slot, which
  doesn't fit here. Rows are packed caller-side since GLES2 lacks
  GL_UNPACK_ROW_LENGTH.
- D3D11: UpdateSubresource with a box, no staging texture needed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-12 13:16:17 -06:00
Henrik Rydgård 10a5d2f810 OpenGL: Improve checks for fragment shader float precision.
Fixes #22001 (although there may be other artifacts).
2026-07-30 10:03:15 +02:00
Henrik Rydgård 5f7281bd8e Remove old vestiges of geometry shader support 2026-07-08 18:25:08 +02:00
Henrik Rydgård ebc564a465 Centralize handling of another GPU flag 2026-06-27 13:50:03 +02:00
Henrik Rydgård ea8a648737 Refactor UI shader presets, prepare for some updates to the ImGe debugger 2026-06-14 11:08:56 +02:00
jasaaved 5e25118043 Fix the exclusive fullscreen config guard and switching the setting on/off
Previously the exclusive fullscreen option in the settings screen was
guarded by a compile-time #ifdef VK_EXT_full_screen_exclusive, which is
always true on Windows. It now uses a runtime fullScreenExclusiveSupported
cap derived from whether the extension is actually enabled by the driver.

Switching between borderless and exclusive fullscreen currently requires a
restart. This is because once DWM has claimed the window (any frames
presented), ALLOWED_EXT cannot re-engage exclusive mode on an existing
swapchain. A new process gets a fresh HWND that DWM has not claimed yet,
so ALLOWED_EXT works correctly at startup.

The proper fix is to use VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
with vkAcquireFullScreenExclusiveModeEXT/vkReleaseFullScreenExclusiveModeEXT
to explicitly negotiate exclusive mode with DWM mid-session without needing
a restart. To be done in a follow-up.
2026-06-03 17:15:13 -07:00
Henrik Rydgård f60e27a9b7 Just some refactoring of the GPUStatistics struct, and more use of StringWriter 2026-05-29 14:40:31 +02:00
Henrik Rydgård dd125b2e4d Delete obsolete (and non-working) support for GPUs without non-pow-2 textures. 2026-05-24 14:15:34 +02:00
Henrik Rydgård 4a420c95c2 Remove some redundant device caps, show clip/cull/depth-clamp in system info 2026-05-21 11:59:26 +02:00
Henrik Rydgård f12472aede Give a name to an old mali GPU bug 2026-01-22 13:32:43 +01:00
Henrik Rydgård 1efcaafd5a Add query for max texture size 2025-11-15 15:26:02 +01:00
Henrik Rydgård 042cf87248 Rework the present mode settings, refactor. 2025-10-20 21:28:38 +02:00
Henrik Rydgård 82bba691dd Unexpose the specialized Vulkan presentation modes for now 2025-10-20 19:53:21 +02:00
Henrik Rydgård 176c55da25 Remove unused "interval" concept from presentation mode 2025-10-19 18:18:06 +02:00
Henrik Rydgård b082e94edb Initial work on using premultiplied alpha in the UI 2025-10-16 11:07:05 +02:00
Henrik Rydgård 14016f84df Comments 2025-09-04 11:24:43 +02:00
Henrik Rydgård 2cf0ffea73 Allow choosing the frame presentation mode in detail in Vulkan mode 2025-08-21 01:01:16 +02:00
Henrik Rydgård dae0d11809 Remove some D3D9 leftovers 2025-06-10 16:59:14 +02:00
Henrik Rydgård 6cfea96e58 Remove D3D9 support, to make future changes easier 2025-06-10 15:07:16 +02:00
Henrik Rydgård 531842f577 Add font cache stats to "internals" screen 2025-04-09 12:40:10 +02:00
Henrik Rydgård 58adb379ea GE debugger improvements 2024-12-20 20:31:58 +01:00
Henrik Rydgård 111d0c872d Global rename of FBChannel to Aspect, also make it a class enum 2024-12-15 22:24:05 +01:00
Henrik Rydgård 27122a9e64 Work on previews 2024-12-10 22:09:51 +01:00
Henrik Rydgård e4adc112ff ImDebugger: Add a basic texture browser 2024-11-29 19:30:38 +01:00
Henrik Rydgård 6763c13f88 ImGui: Finish implementing pipeline switching for all backends 2024-11-27 01:19:05 +01:00
Henrik Rydgård 09779e0f44 ImGui drawing: Allow varying the pipeline when binding textures 2024-11-26 19:59:09 +01:00
Henrik Rydgård e82b7f788e Implement texture binding in draw batches. Framebuffer viewer now works in Vulkan. 2024-11-26 09:22:35 +01:00
Henrik Rydgård e66516eb50 ImDebugger: Add ability to rename function symbols 2024-11-23 23:23:52 +01:00
Henrik Rydgård 194b2ce076 Ge Debugger: Add a framebuffer listing, along with some plumbing 2024-11-23 23:23:48 +01:00
Henrik Rydgård 659af60613 Fix ImDebugger rendering on D3D9 as well (although not very optimally). 2024-11-21 15:48:18 +01:00
Henrik Rydgård 472103d460 Back out the 32-bit index buffer support. Not actually needed for ImGui. 2024-11-04 23:14:39 +01:00
Henrik Rydgård 17a7c80cb1 Get it rendering on Vulkan and D3D11 (OpenGL is bugged though) 2024-11-04 23:14:39 +01:00
Henrik Rydgård d37c04079d Change the 2D matrix generation to query the coordinate convention from the draw context 2024-11-04 23:14:23 +01:00
Henrik Rydgård 8f8598c347 thin3d: Add partial support for 32-bit index buffers. Add DrawIndexedUP. 2024-11-04 23:14:22 +01:00
Henrik Rydgård 4d6905672e Bunch more linting 2024-10-10 11:57:10 +02:00
Henrik Rydgård 8c8b34aac4 Vulkan: Separate the instance and device API versions, for extension loading purposes 2024-09-25 18:38:31 +02:00
Henrik Rydgård b2d9ac54dd Make InfoField an "enum class", extract function FormatAPIVersion 2024-09-25 16:34:33 +02:00
Henrik Rydgård eccd7f3767 More const/static-ification 2024-09-17 15:22:37 +02:00
Henrik Rydgård 665f03ff62 Add provoking vertex to caps, flip the flag around 2024-07-17 14:40:52 +02:00
Henrik Rydgård c38ce2a5be Fix an issue when bringin up the dev menu with transparent background disabled 2024-05-11 21:28:26 +02:00
Henrik Rydgård c5791764d8 Make the i18n T function use std::string_view
Buildfixes, crashfixes

One more

Android buildfix

Buildfix Qt
2024-02-12 18:44:39 +01:00
Henrik Rydgård 6ce4933db8 Split the discard-stencil-bug flag into separate flags for Adreno and Mali 2024-02-02 11:11:31 +01:00
Henrik Rydgård c5191cad4c Disable 16-bit textures on PowerVR.
Fixes #18780
2024-01-29 15:48:27 +01:00
Henrik Rydgård 51097279c9 Vulkan: Fix race condition when changing MSAA mode with the game running "behind" the menu. 2024-01-23 11:28:45 +01:00
Henrik Rydgård 74f5be02a1 GameInfo: Try to reduce the locking a bit. 2024-01-18 22:52:56 +01:00
Henrik Rydgård cbb4236cd8 Vulkan: Attempt to fix some more shutdown race conditions, simplify. 2024-01-17 14:49:49 +01:00
Henrik Rydgård d0faf250b5 Remove unused async compute pipeline creation 2024-01-15 12:38:59 +01:00
Henrik Rydgård ed4941f416 Remove Vulkan (and Windows.h) include from DevScreens.cpp 2023-12-14 19:01:18 +01:00
Henrik Rydgård 4c3f82da55 Remove ManagedTexture from HttpImageView 2023-12-12 22:44:03 +01:00