Skip to content

PlayStation Portable

codingncaffeine edited this page Jun 6, 2026 · 1 revision

PlayStation Portable (PPSSPP)

Visual Upgrades

The PSP renders natively at 480x272. PPSSPP's OpenGL renderer supports substantial upscaling:

Option Native Upscaled (suggested)
ppsspp_internal_resolution 480x272 1920x1088 (4x) or 2880x1632 (6x)
ppsspp_texture_filtering Auto Auto max quality
ppsspp_texture_anisotropic_filtering 16x 16x
ppsspp_texture_scaling_type xbrz xbrz
ppsspp_texture_scaling_level disabled 3x or 4x (AI texture upscaling)
ppsspp_texture_deposterize disabled enabled (smooths color banding)
ppsspp_mulitsample_level Disabled x4

Internal Resolution, Texture Filter, Anti-Aliasing, and Texture Upscaling are surfaced in the cog menu; the rest are in the full Core Options panel. All options take effect immediately without restarting the game. Texture scaling (xbrz 3x/4x) is the most GPU-intensive option — lower it first if performance drops.

GLX Context Requirement (Linux)

On Linux, PPSSPP requests a GL 3.1 core context but initializes GL through glewInit(), which fails on any core-profile EGL context ([G3D] glewInit() failed. → black screen). The PSP handler therefore forces a compatibility GL profile (effectively a GLX context) per-console — see ForceCompatibilityGlProfile in PspHandler.cs. This is handled automatically; no user configuration is needed. The core then renders into an FBO read back through the never-blocking PBO ring and presented on the native Wayland toplevel (X11/SDL fallback).

RetroAchievements Hardcore

The PSP hardcore carve-out applies on Linux exactly as on Windows: if you launch a PSP game with RetroAchievements Hardcore enabled, the session drops to softcore for that game (PPSSPP can't satisfy hardcore's requirements). Achievements still unlock, just without the hardcore badge.

Teardown

The OpenGL context_destroy callback is skipped on window close. Calling it crashes the libretro PPSSPP core — its GPU thread is still running cleanup and the callback interferes with that process.

The cleanup sequence:

  1. retro_unload_game — PPSSPP's GPU thread self-cleans after this
  2. Skip context_destroy
  3. Extended quarantine period (3–4 seconds) before releasing the GL context — PPSSPP's GPU thread takes longer to fully exit than other cores

Clone this wiki locally