Files
Henrik RydgårdandClaude Opus 5.5 9be1d223b6 Remove MoltenVK: Metal is the backend on iOS, and the default on Macs
The iOS and tvOS apps no longer link the static MoltenVK (the
ios/MoltenVK submodule is gone), so Vulkan can't load there and Metal is
the only backend. Without the static case, Vulkan's functions are now
always loaded at runtime (PPSSPP_VK_STATIC is gone).

The Mac app no longer bundles libMoltenVK.dylib (ext/vulkan/macOS is
gone). Metal is the default on Apple Silicon (Intel Macs stay on
OpenGL), but Vulkan still works with a separately installed MoltenVK,
the Vulkan SDK's or Homebrew's, which is useful for comparisons. A saved
Vulkan setting falls back to the default when there's none.

The libretro cores are unchanged: they get MoltenVK from the frontend.

frametests.py's --ios and --adb default to Metal on a Mac host.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 14:58:38 +02:00
..
2023-04-25 11:45:20 +02:00
2026-09-24 13:40:56 -06:00
2026-06-16 11:39:24 +02:00
2026-08-06 12:47:28 +02:00
2025-05-26 19:40:31 +02:00

Build instructions
==================
See https://github.com/hrydgard/ppsspp/wiki/Build-instructions .

Also, for general information, see https://www.ppsspp.org/docs .

SDL2 Game Controller Support Notes
==================================

For SDL2 game controller support, at least SDL 2.0.4 is required.

Under the assets directory is the SDL2 game controller database: gamecontrollerdb.txt. This file contains many known control pad mappings for Windows, Linux and MAC OS. PPSSPPSDL will load this file at start-up and work out how to assign control pad buttons for your control pad.

Hot plugging of control pads is also supported.

If you control pad has a "Guide" or "Home" button then when pressed, this will trigger the emulator pause menu, thus allowing you to exit the emulator if you wish or load another game from your library.

WSL notes
=========
Works fine on WSL2 with OpenGL, at least. For more notes, see https://www.ppsspp.org/docs/development/wsl/ .

Running with valgrind
=====================

Here's an example where we both use suppressions, and generate new ones (that you can then take from suppressions.log and simplify and copy to valgrind-wsl2.supp):

> valgrind --suppressions=SDL/valgrind-wsl2.supp --gen-suppressions=all --log-file=suppressions.log build/PPSSPPSDL

Running with ASAN
=================

./b.sh --sanitize

build/PPSSPPSDL.app/Contents/MacOS/PPSSPPSDL

Running with UBSAN
==================

./b.sh --sanitize --sanitizeub

UBSAN_OPTIONS=print_stacktrack=true build/PPSSPPSDL.app/Contents/MacOS/PPSSPPSDL