Commit Graph
100 Commits
Author SHA1 Message Date
Henrik Rydgård bb3862b37e Revert "Extend LoadExecForKernel with real VSH loadexec/exit syscalls"
This reverts commit 510cfb421c.
2026-08-07 16:01:27 +02:00
Henrik Rydgård 9d61a82671 Merge pull request #22044 from hrydgard/minor-tweaks
Move event queue out from the ScreenManager, bugfixes
2026-08-07 15:44:25 +02:00
Henrik Rydgård cd254c9ec3 Merge branch 'master' into minor-tweaks 2026-08-07 15:14:47 +02:00
Henrik Rydgård b5a880568d Fix some latent bugs, delete some code. 2026-08-07 14:45:45 +02:00
Henrik Rydgård 0323598941 Two bugs in Encoding 2026-08-07 14:43:56 +02:00
Henrik Rydgård a47edbf6ef Move event queueing out of ScreenManager. This is a prerequisite for an upcoming change. 2026-08-07 14:42:17 +02:00
Henrik Rydgård 7219cd2f5a Split off ScreenManager from Screen.cpp 2026-08-07 14:30:36 +02:00
Henrik Rydgård 957534d766 Merge pull request #22042 from hrydgard/upnp-loop-work
Rework UPnP service thread sync
2026-08-07 12:46:59 +02:00
Henrik Rydgård 44d9dcae8f Merge pull request #22041 from hrydgard/obscure-crash-fixes
Fix bugs in some UTF8 string handling utility functions
2026-08-07 12:46:45 +02:00
Henrik Rydgård 46c491e8be Merge pull request #22043 from hrydgard/android-activity-refactor
Android: Some old code cleanups
2026-08-07 12:13:58 +02:00
Henrik Rydgård 6f7de71ed0 Fix bugs in some UTF8 string handling utility functions 2026-08-07 11:56:14 +02:00
Henrik Rydgård e59aa11987 Raise the limits for when we use parallelism in ParallelMemcpy 2026-08-07 11:44:01 +02:00
Henrik Rydgård 9c8a4035ef Buildfix, restore lost check 2026-08-07 11:27:45 +02:00
Henrik Rydgård c1310ae4a5 Rework UPnP service thread sync
No longer waking up twice per second. Instead a slow 5s poll plus
wakeups if needed.
2026-08-07 11:24:22 +02:00
Henrik Rydgård cac10caed7 Minor cleanup 2026-08-07 10:54:02 +02:00
Henrik Rydgård 30d04b72a6 Refactor sd card detection 2026-08-07 10:54:02 +02:00
Henrik Rydgård eabec15add Alert dialog code cleanup 2026-08-07 10:54:02 +02:00
Henrik Rydgård f62a10b61a Package and library dir cleanup 2026-08-07 10:54:02 +02:00
Henrik Rydgård f8c343097a Merge pull request #22040 from hrydgard/avoid-strlen-memblockinfo
Avoid wasting CPU on counting characters in the memblock management
2026-08-07 10:45:15 +02:00
Henrik Rydgård 256e4082eb Merge branch 'master' into avoid-strlen-memblockinfo 2026-08-07 10:44:55 +02:00
Henrik Rydgård c44cbb5ccc Merge pull request #22036 from hrydgard/merge-various-things
DNS bugfixes, various code cleanup
2026-08-07 09:23:21 +02:00
Henrik Rydgård d87a98c4a8 Avoid wasting CPU on counting characters in the memblock management
Unittest and a bugfix by claude.
2026-08-07 08:56:41 +02:00
Henrik Rydgård 7700861d49 More iOS cleanup
Remove outdated code.
2026-08-07 08:49:29 +02:00
Henrik Rydgård da567f6a89 Discord cleanup 2026-08-07 08:49:29 +02:00
Henrik Rydgård 3504be26b0 More DNS fixes by copilot, additionally fixed up by claude 2026-08-07 08:49:29 +02:00
Henrik Rydgård 798ba7f79d Fix some bugs in Resolve.cpp 2026-08-07 08:49:29 +02:00
Henrik Rydgård 2c73aead45 Minor code cleanup on pause screen 2026-08-07 08:49:29 +02:00
Henrik RydgårdandClaude Sonnet 5 510cfb421c Extend LoadExecForKernel with real VSH loadexec/exit syscalls
Adds SceKernelLoadExecVSHParam (matching JPCSP's reference layout - its
first four fields line up with the existing SceKernelLoadExecParam,
which is why the plain sceKernelLoadExec already worked for
sceKernelLoadExecVSHMs2) and fills in the rest of LoadExecForKernel's
NIDs from JPCSP: real implementations for sceKernelExitVSHVSH/Kernel
(mirrors sceKernelExitGame) and sceKernelLoadExecBufferVSHUsbWlan (loads
an exec from an in-RAM buffer instead of a file - the VSH's "push a game
over USB/WLAN" path), plus UNIMPL stubs for everything JPCSP itself only
knows by NID.

sceKernelLoadExecBufferVSHUsbWlan needed __KernelLoadExec split into a
file-reading front end and a shared __KernelLoadExecFromPtr back end
that both it and the new buffer-based path call into - a pure
extract-method refactor of the single most heavily used boot path in the
emulator. Verified no regression: same 11 passed / 9 pre-existing-failed
split on pspautotests/tests/cpu/*, and loader/bss still passes, before
and after this change.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01PSNaZnHCjmryS3ziVN9gZU
2026-08-07 08:49:25 +02:00
Henrik Rydgård 5f5130025c Merge pull request #22037 from hrydgard/hide-status-bar-ios
Add setting to hide/show the status bar on iOS
2026-08-07 07:24:25 +02:00
Henrik Rydgård 664cd8c2f5 Merge pull request #22039 from hrydgard/focus-fix
Fix issue with chat button / DevMenu button becoming focusable
2026-08-07 07:24:03 +02:00
Henrik Rydgård e4b90c0471 Fix issue with chat button / DevMenu button becoming focusable
This made gameplay a bit difficult when these buttons were enabled.
2026-08-07 06:56:52 +02:00
Henrik RydgårdandClaude Opus 5 b6b8780cb9 iOS: Remove some dead code
- AudioEngine.mm/.h: not in the source list at all, only in the ARC
  set_source_files_properties list, and written for manual retain/release
  ([super dealloc]), so it couldn't have compiled under ARC anyway. The actual
  audio path is iOSCoreAudio.mm.
- DisplayManager.mm: empty file, referenced nowhere.
- iOSCoreAudioSetDisplayConnected: never called, so g_displayConnected was
  always false and the external-display branch in UpdateSession unreachable.
  Also dropped an unused local there.
- AppDelegate: the "screen" property was never assigned, so both view
  controllers were setting their frame from [nil bounds], i.e. CGRectZero. The
  window sizes the root view anyway. Also removed the stale launchPPSSPP:argv:
  declaration (it lives on SceneDelegate now), a forward declaration of a
  PPSSPPViewController protocol that doesn't exist, and an unreachable return.
- getView: declared on the base class and implemented identically in both
  subclasses, called by nobody.
- bindDefaultFBO: moved the empty implementation to the base class so it isn't
  missing there, and dropped the Metal no-op override.
- The unused delta/lastTimestamp computation in displayLinkFired.

Also fixed the viewWillAppear/viewWillDisappear log messages in the GL view
controller, which claimed to resume and pause the display link but don't.

The getView and bindDefaultFBO changes clear three -Wincomplete-implementation
warnings, and the AppDelegate.h one clears a fourth.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-07 06:56:07 +02:00
Henrik RydgårdandClaude Opus 5 d3012ea1db iOS: Don't pass a non-literal format string to NSLog
Benign as written since neither string contains a format specifier, but it's
exactly the pattern -Wformat-security exists to catch.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 56affb3cb9 iOS: Don't resolve request ID 0 from the payment queue
updatedTransactions posted success/failure unconditionally, but StoreKit also
delivers transactions we didn't initiate - unfinished ones at startup, for
instance - when no request is pending. Request IDs start at 10, so that just
produced "Unexpected request ID 0" errors. Guard it like the restore-finished
handler already does.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 6548a4f5cf iOS: Move accelerometer queue setup inside the init null check
Harmless today since messaging nil is a no-op, but it doesn't belong outside the
"if (self)" block.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 11a402df6f iOS: Call [super init] in LocationHelper's initializer
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 99624b7fd4 iOS: Fix string encoding used when launching URLs
NSStringEncodingConversionAllowLossy is a conversion option, not an encoding.
Its value is 1, which as an NSStringEncoding means NSASCIIStringEncoding, so any
URL with non-ASCII characters produced a nil string and a nil NSURL. Use UTF-8,
and bail out with a log instead of calling openURL with nil.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 8de3d9b8a0 iOS: Don't fall off the end of checkPermission
The switch covered every AVAuthorizationStatus known today, so an unhandled one
would return garbage from a non-void function. Treat unknown statuses as denied.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 bc2a5c7f3b iOS: Fix per-frame leak in the camera capture path
imageFromSampleBuffer released the input context but not the output one, leaking
a full-size bitmap context for every captured camera frame.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 89f7094513 iOS: Fix use-after-free when Vulkan init fails
viewDidLoad deleted the graphics context on InitAPI failure but left the member
pointing at the freed object, and then kept going - runVulkanRenderLoop and
shutdown would both use it. Null it out instead; both already check.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 6aad668a38 iOS: Fix always-true condition in the gsEvent key decoder
"else if (GSEVENT_TYPE_KEYDOWN)" tests a constant, so every gsEvent that wasn't
a key up - modifier events (type 12) in particular - was delivered to NativeKey
as a key down.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik RydgårdandClaude Opus 5 8bfc151395 iOS: Hide the status bar when immersive mode is enabled
prefersStatusBarHidden was dead code - it computed an orientation and a
(commented out) user preference, then unconditionally returned false. So the
status bar was only ever hidden on iPhone in landscape, and only because iOS
does that on its own in compact height.

Now it honors bImmersiveMode from the DisplayLayoutConfig matching the current
orientation, so it also applies in portrait and on iPad. Adds the corresponding
checkbox to the iOS system settings, and updates the status bar on rotation and
when the setting is toggled.

Also fixes a missing break in the ROTATE_UPDATED case in System_Notify, and a
static/non-static mismatch on sceKernelLoadModuleBufferUsbWlan that broke the
build (the header intentionally exposes it for sceVshBridge).

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JZk5y4Fzw811WJoNWZb8Sc
2026-08-06 20:56:37 +02:00
Henrik Rydgård e009d182ff Merge pull request #22034 from hrydgard/disable-opengl-on-ios
Remove OpenGL support on iOS
2026-08-06 19:38:00 +02:00
Henrik Rydgård ed1956b5fb Merge pull request #22035 from hrydgard/libretro-vulkan-cleanup
Vulkan: remove libretro's global function-pointer wrapper hack - by Claude AI
2026-08-06 18:50:20 +02:00
Henrik Rydgård 092ab42fe7 Clean up ugly usage of the g_nativeLibDir global. Now it's local in VulkanLoader. 2026-08-06 18:12:04 +02:00
Henrik Rydgård 60fc887306 Clean up Config::PostLoadCleanup, reject disabled GPU backends 2026-08-06 17:45:37 +02:00
Henrik Rydgård 3ae9638885 Disable OpenGL on iOS 2026-08-06 17:45:37 +02:00
Henrik Rydgård 64cd88d120 AGENTS.md: document the libretro Windows build (msys2 + MSVC via make)
Captures the msys2/make/cl.exe recipe from libretro/README_WINDOWS.txt plus
two gotchas specific to driving it non-interactively (COMSPEC and
ProgramFiles(x86) not being inherited by a sandboxed agent invocation,
breaking the VSWhere.sh-based VS auto-detection) and the VsInstallRoot
override workaround, so this doesn't need to be rediscovered next time.
2026-08-06 17:07:12 +02:00
Henrik Rydgård 4160414b31 Vulkan: remove libretro's global function-pointer wrapper hack
libretro/libretro_vulkan.cpp got PPSSPP's libretro core working with
RetroArch's Vulkan integration by globally monkey-patching PPSSPP's Vulkan
loader function pointers (vkCreateInstance, vkCreateDevice,
vkCreateSwapchainKHR, vkAcquireNextImageKHR, vkQueuePresentKHR,
vkQueueSubmit, etc.) so the unmodified VulkanContext class would end up
wrapping RetroArch's already-existing VkInstance/VkDevice instead of
creating its own, and so a fake VkSwapchainKHR (a self-managed array of
images synced against RetroArch's retro_hw_render_interface_vulkan
callbacks) could stand in for the real swapchain that libretro's Vulkan
model doesn't have. Flagged in-code as "a wacky wrapper".

Replaces that with first-class support in VulkanContext for the two things
libretro actually needs:

- Adopting an externally-created instance/device instead of faking
  vkCreateInstance/vkCreateDevice: VulkanContext::CreateInstanceExternal()
  adopts RetroArch's VkInstance; CreateDevice() gained optional
  extraDeviceExtensions/extraRequiredFeatures params so RetroArch's
  requirements get merged into a real vkCreateDevice() call;
  ownsInstance_/ownsDevice_ flags (the latter set via
  SetDeviceExternallyOwned()) mean DestroyInstance()/DestroyDevice() skip
  the real vkDestroy* calls when something else owns the object, without
  needing to intercept anything. VulkanLoader gained
  VulkanLoadFromGetInstanceProcAddr() for bootstrapping from a
  host-supplied proc-addr getter instead of dlopen/dlsym-ing the loader
  ourselves - vkGetDeviceProcAddr is resolved via the real instance handle
  (not NULL), since per the Vulkan spec it's not one of the handful of
  commands queryable with a NULL instance.
- A pluggable presentation backend (Common/GPU/Vulkan/VulkanPresentation.h)
  for hosts with no real VK_KHR_swapchain, replacing the fake-swapchain-
  handle trick. VulkanContext::GetPresentation() is null by default, so
  every existing platform's real-swapchain code path is untouched;
  libretro/LibretroVulkanPresentation implements this interface directly
  against retro_hw_render_interface_vulkan, as real class state instead of
  file-scope globals. Several pieces of state that are normally only
  populated as a side effect of ReinitSurface()/InitSwapchain() - the
  graphics queue/queue family index (ChooseQueue() is entangled with
  real-surface presentation-support checks), the swapchain format, and
  the available present modes - needed presentation-aware fallbacks since
  libretro never calls that real-surface path at all.

libretro/LibretroVulkanContext.cpp now drives VulkanContext's real, public
API directly - no more hijacked function pointers, no more fake surface or
swapchain. libretro/libretro_vulkan.cpp is deleted.

Verified with a full build+run in RetroArch (not just compile-time
checks): the libretro Makefile doesn't track header dependencies
(cl.exe doesn't support -MMD/-MP, and Makefile.common never sets up an
equivalent), so a `make clean` full rebuild is required after any header
change to avoid linking stale object code from before the change - several
of the fixes above were initially masked by exactly that.
2026-08-06 17:07:05 +02:00
Henrik Rydgård a8b88856f7 Merge pull request #22033 from hrydgard/sdl-headless-vulkan
Headless SDL: Add support for Vulkan rendering
2026-08-06 13:28:33 +02:00
Henrik Rydgård 8565573b51 Buildfixes for Mac/Windows 2026-08-06 12:47:28 +02:00
Henrik Rydgård c490d4ef36 Headless SDL: Add support for Vulkan rendering 2026-08-06 11:06:03 +02:00
Henrik Rydgård 35f558d677 Merge pull request #22032 from Kethen/wayland_vulkan_fix
bring back VulkanContext::SetCbGetDrawSize for linux wayland
2026-08-06 09:21:03 +02:00
Henrik Rydgård 2c620494b2 Merge pull request #22029 from hrydgard/cmdline-cleanup
Finish moving command line parsing into CmdLine.cpp
2026-08-05 16:40:42 +02:00
Henrik RydgårdandClaude Sonnet 5 5bd1ff8066 Move remaining manual command line parsing into CmdLine.cpp
Headless.cpp, NativeApp.cpp, and SDLMain.cpp each still hand-parsed a few
argv flags directly (mount/log/state/ignore/loglevel in headless and the
app, xres/yres/dpi/scale in SDL), duplicating and in some cases conflicting
with the shared CommandLineOptions parser. Consolidate all of it into
CmdLine.cpp/.h so there's a single source of truth, and drop the now-dead
remain_argc/remain_argv filtering in SDLMain.cpp since NativeInit no longer
reads argv itself.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01PfFvWzpHxErWgRhKqqSewN
2026-08-05 16:02:49 +02:00
Henrik Rydgård e260188c49 Merge pull request #22026 from hrydgard/headless-refactor
Rework graphics init in the PPSSPPHeadless build
2026-08-05 11:02:29 +02:00
Henrik Rydgård 16206d18ab Simplify the EmuThread API again 2026-08-05 09:48:51 +02:00
Henrik Rydgård e0c942e862 Windows ARM64 buildfix (no GL available) 2026-08-05 09:24:12 +02:00
Henrik Rydgård 58c70f312a SDL: Initialize g_display before starting the EmuThread
Avoid racing between EmuThread and main thread.
2026-08-05 09:21:43 +02:00
Henrik Rydgård 905650921e Android hang fix when switching backends, buildfix 2026-08-05 00:59:33 +02:00
Henrik Rydgård 0324c7a912 Windows buildfix 2026-08-05 00:15:56 +02:00
Henrik Rydgård 4add25e6c7 Buildfixes, bump gradle 2026-08-05 00:15:56 +02:00
Henrik Rydgård ecae62e737 Fix headless with OpenGL for SDL 2026-08-05 00:15:56 +02:00
Henrik Rydgård 551e4cd0ab Headless: Make all GPU backends work correctly on Windows 2026-08-05 00:15:56 +02:00
Henrik Rydgård 25cf52176f Misc headless work 2026-08-05 00:15:56 +02:00
Henrik Rydgård 5eb4772644 Minor EmuThread refactor 2026-08-05 00:15:56 +02:00
Henrik Rydgård edd968062a Correct the Atrac3 security check that broke music in GTA
See 4cd611b71f
2026-08-05 00:15:38 +02:00
Henrik Rydgård a6896ae3b0 Merge pull request #22025 from hrydgard/graphics-context-refactor
Graphics context shutdown refactor
2026-08-04 19:26:51 +02:00
Henrik Rydgård 15f2bbc27f Buildfixes 2026-08-04 18:57:53 +02:00
Henrik Rydgård c42a3f070a Implement the new shutdown path for libretro too 2026-08-04 17:45:03 +02:00
Henrik Rydgård be922eca62 Make OpenGL render thread shutdown more robust. 2026-08-04 16:44:55 +02:00
Henrik Rydgård 092ec2f391 Merge pull request #22023 from hrydgard/wasapi-fixes
WASAPI (Windows audio): Fix a 5.1 bug, fix a bunch more smaller bugs
2026-08-04 10:38:28 +02:00
Henrik Rydgård 971b5eca13 WASAPI: Use device's suggested format when available
When IsFormatSupported returns S_FALSE with a closestMatch format,
evaluate it and use it if it's acceptable (stereo float). This can
improve compatibility with devices that don't support our exact
requested format but have a similar one.

Previously we just discarded closestMatch and forced manual conversion,
which was wasteful when the device provided a perfectly usable
alternative format.
2026-08-04 00:37:55 +02:00
Henrik Rydgård 32f3fbd65a WASAPI: Fix channel mapping for 5.1 audi
CRITICAL BUG FIX: The previous code assumed incorrect channel ordering
for multichannel audio, breaking 5.1 (6-channel) configurations.

Problem:
- Code assumed channel order: FL, FR, RL, RR, C, LFE
o systems- Actual 5.1 standard order: FL, FR, C, LFE, RL, RR
- This caused center/LFE to receive rear audio and vice versa
- Users had to force stereo mode to get working audio

Solution:
- Parse dwChannelMask from WAVEFORMATEXTENSIBLE to determine actual
  channel positions
- Map stereo input to correct output channels based on the mask
- Properly handles 5.1, 7.1, and other multichannel configurations
- Safely handles non-standard channel layouts

The channel mapping now works correctly for all standard speaker
configurations by querying the device's actual channel layout instead
of assuming a fixed order.
2026-08-04 00:37:55 +02:00
Henrik Rydgård 11d4107230 WASAPI: Replace magic numbers with named constants
Define constants for channel upmixing attenuation factors to improve
code readability and maintainability:
- SURROUND_ATTENUATION (0.7f) for rear/side channels
- CENTER_MIX_ATTENUATION (0.7f) for center channel
- LFE_MIX_ATTENUATION (0.5f) for LFE channel
2026-08-04 00:37:55 +02:00
Henrik Rydgård fd1e48ecc5 WASAPI: Add error check for RegisterEndpointNotificationCallback
Log a warning if registering for device change notifications fails.
This is non-fatal but means automatic device switching won't work.
2026-08-04 00:37:55 +02:00
Henrik Rydgård 95e09324a7 WASAPI: Fix ClampFloatToS16 to use full s16 range
Changed minimum clamp from -32767 to -32768 to match the full
range of signed 16-bit integers.
2026-08-04 00:37:55 +02:00
Henrik Rydgård d97f42c225 WASAPI: Cache channel count to avoid unsafe pointer access from audio thread
Store format_->nChannels in atomic curChannels_ member to avoid
unsynchronized access to format_ pointer from the audio thread.
The format_ pointer can be freed/reallocated during Stop() while
the audio thread might still be reading it.
2026-08-04 00:37:55 +02:00
Henrik Rydgård 3eeae2d89a Merge pull request #22021 from hrydgard/more-sdl-window
More SDL window/init fixes
2026-08-04 00:37:30 +02:00
Henrik Rydgård 5cb0965ea4 Merge pull request #22022 from hrydgard/android-taskswitch-fix
Don't exit games when leaving the emuthread
2026-08-04 00:37:20 +02:00
Henrik Rydgård 648560b2d3 Don't exit games when leaving the emuthread 2026-08-04 00:24:39 +02:00
Henrik Rydgård ced24079cb Error handling cleanup, with some Claude help 2026-08-03 23:53:48 +02:00
Henrik Rydgård 6272eca2e7 Fix some error handling bugs. 2026-08-03 23:37:17 +02:00
Henrik Rydgård 72a80363d9 Update the SDL DPI handling 2026-08-03 23:26:46 +02:00
Henrik Rydgård b6d7c18f39 Try to eliminate a race condition 2026-08-03 23:09:07 +02:00
Henrik Rydgård d8d7225710 Correct the OpenGL retry loop 2026-08-03 22:51:31 +02:00
Henrik Rydgård 2e7e6ab5a7 Merge pull request #22015 from hrydgard/texture-replacement-unittest
Add TextureReplacer unit test; make replacer testable standalone
2026-08-03 22:43:11 +02:00
Henrik Rydgård 68ec34ad54 Build and warning fixes 2026-08-03 19:11:07 +02:00
Henrik Rydgård 55eee26c52 Assorted warning fixes 2026-08-03 18:55:35 +02:00
Henrik Rydgård 4d98ff8404 Clean up Android.mk for the unittest 2026-08-03 18:55:33 +02:00
Henrik Rydgård de7989ae56 Add TextureReplacer unit test; make replacer testable standalone
Add unittest/TestTextureReplacer which creates a fictive texture pack
(textures.ini with readable invented hashes plus real PNG files), loads
it via the replacer, and verifies lookups, filtering, hashranges, mip
levels, and missing/ignored entries.

To make the replacer runnable outside the emulator:
- The constructor now accepts a null DrawContext (formats just default
  to unsupported).
- FindReplacement/FindFiltering use the replaceEnabled_ member instead
  of the global config.
- Added TextureReplacer::LoadPackForTesting() to load an ini from a
  path directly.
2026-08-03 18:55:33 +02:00
Henrik Rydgård 698fb7e39d Merge pull request #22020 from hrydgard/sdl-window-rework
SDL GL/Vulkan init rework
2026-08-03 18:13:16 +02:00
Henrik Rydgård 0f4f1d7091 More SDL GL context refactor 2026-08-03 17:52:56 +02:00
Henrik Rydgård 1c0740c4b9 SDL: Simplify graphics context fallback 2026-08-03 14:54:49 +02:00
Henrik Rydgård 09bf426ee7 Merge pull request #22019 from hrydgard/restore-directory-plugins
Restore "file handler plugins" functionality in VirtualDiscFileSystem
2026-08-03 12:21:45 +02:00
Henrik Rydgård 9a7724f799 Document the legacy Android build in AGENTS.md
Add instructions for the android/jni ndk-build setup (ab.sh/ab.cmd), how
it maps to the gradle NDK version, and how to produce ppsspp_headless.
2026-08-03 12:00:16 +02:00
Henrik Rydgård c66e5a26bd Use the gradle NDK version for the legacy Android build and parallelize
The legacy android/jni build (ab.sh / ab.cmd / CI) used an ancient NDK
(r21e) and hardcoded job counts. Update it to the NDK version used by the
gradle build (29.0.14206865) and derive the job count from the available
cores (nproc / NUMBER_OF_PROCESSORS) instead of hardcoding.
2026-08-03 12:00:13 +02:00
Henrik Rydgård db30fabf03 Add a setting (defaulting to false) for enabling file handler plugins 2026-08-03 11:24:36 +02:00
Henrik Rydgård 317a06f2f6 Revert "Delete the ability to load file handler plugins from extracted game folders"
This reverts commit e806192154.
2026-08-03 11:22:05 +02:00
Henrik Rydgård b16c8accff cargo bumps 2026-08-03 11:22:05 +02:00