github stenzek/duckstation latest
Latest Rolling Release

latest release: preview
9 days ago

Commits

  • 2781502 SPU: Streamline per-voice flag processing
  • 690ead7 SPU: Vectorize Gaussian interpolation
  • 5a7a301 SPU: Consolidate capture buffer writes
  • a24350c SPU: Decode ADPCM nibbles in pairs
  • a490418 VulkanDevice: Use timeline semaphores when available
  • ed6720b Tests: Fix core-tests building on Windows
  • 025ea24 GPU/HW: Fix typo in CompilePipelines()
  • 88ccab2 Achievements: Fix some options potentially not live-updating
  • 16452a0 Achievements: Check for login request in LoadStateFromBuffer()
  • 3c14141 FullscreenUI: Fix extra uneven height in achievement notifications
  • 0910d4e FullscreenUI: Reduce text size of small-mode category badges
  • 96268ab Qt: Remove empty widget text
  • 390c878 GameDB: Persona localizedName
  • e26fa60 Update Italian translation (#3798)
  • 563c355 TaskQueue: Add GetOutstandingTasks() and ExecuteOneTask()
  • efecb78 Threading: Add GetProcessorCount()
  • 0d2e662 Core: Make TaskQueue thread count dynamic
  • 60b06c0 ObjectArchive: Use binary keys instead of strings
  • 3151c52 ObjectArchive: Synchronize access internally
  • 79371c4 HTTPCache: Use object archive synchronization
  • 5420d69 GPUDevice: Use ObjectArchive for shader cache
  • 7951eba GPUDevice: Support looking up cached shaders and opaque keys
  • f541abb GPUDevice: Add LoadPipeline() for supported backends
  • 5ebeff9 GPU/HW: Use UIDs for shader generation
  • 7c23927 GPU/HW: Use UIDs as shader cache keys
  • 94e5f08 GPU/HW: Use multi-threaded shader compilation
  • 74a743a GPU/HW: Use multi-threaded pipeline compilation
  • 6fe06b9 VideoThread: Preserve command queue empty slot
  • 7c173d9 VideoThread: Enforce command producer ownership
  • 67d5943 VideoThread: Keep successful software fallback
  • e0519a8 VideoThread: Use video-owned fullscreen settings
  • 7131d91 VideoThread: Destroy inline reconfigure commands
  • c54f16a VideoThread: Snapshot fullscreen state for resize
  • 0cad5f5 VideoThread: Dispatch thread toggle failures safely
  • 8c6ff3b VideoThread: Propagate thread startup failure
  • b5f0fb9 FullscreenUI: Tweak separator style
  • c81a747 Qt: Add multi-instruction selection to debugger
  • 5cc77ac Qt: Persist debugger window state
  • 9c335d9 Qt: Add icons to context menu
  • 0874ed6 Qt: Fix empty debugger toolbar window title
  • 5b056fc Qt: Fix icon missing on newly-added excluded paths
  • 024face Qt: Add context menu to game list exclusion list
  • 28ea031 GPU: Add Disable Upscaled Direct Textures option
  • 63d72ac GameDB: DisableUpscaledDirectTextures for Fear Effect
  • d7036f3 Qt: Persist use-serial-file-names in cover downloader
  • 6ef2714 MSBuild: Force SHA256 source file hashes
  • ef86bf1 InputManager: Add hotkey flag for UI-activatable
  • 396dae9 InputManager: Release cancelled hold bindings
  • 3d16465 InputManager: Clear bindings when input is lost
  • 0ccc553 InputManager: Fix effect sync device matching
  • 3af2d36 ImGuiManager: Track text input separately
  • 5005991 InputManager: Type button transitions
  • e0e6920 FullscreenUI: Add 'Toggle Pause Menu' hotkey
  • 142bdc8 FullscreenUI: Make cheats/achievements/leadboards hotkeys toggles
  • b54fc14 FullscreenUI: Synchronize pause menu toggle
  • 8051b4f PerformanceCounters: Ignore reset boundary sample
  • b7e2050 Qt: Remove unnecessary usage of QOverload (#3799)
  • 2f4724d D3DCommon: Use once_flag for library loading
  • 7137ce2 Threading: Add lightweight Mutex/ConditionVariable wrappers
  • f46b6a8 Core: Use lock_guard for settings accessors
  • bbeac9c Core: Use Threading::Mutex for settings lock
  • 3bb2b0b CDROMAsyncReader: Use lightweight threading abstractions
  • 22072c9 Misc: Replace std::mutex with Threading::Mutex
  • 00d407c CDROMAsyncReader: Convert to namespace
  • dbe1444 GPU/HW: Fix missing mask-or application on texture fallback
  • ac0e3a5 GPU/HW: Add 'Filter Framebuffer Uploads' advanced option
  • aaa8a68 GameDB: Enable background texture filtering on more games
  • 04f821c Qt: Show inherited multi-sampling setting in game properties (#3800)
  • 045b83b GPU/HW: Add additional texture filters
  • a90f008 GameDB: Fix typo in DisableUpscaledDirectTextures
  • 12a1bf9 GameDB: Add mouse for Panekit - Infinitive Crafting Toy Case
  • 742d2d1 CDROMAsyncReader: Use persistent thread
  • c309ca3 CDROM: Fix possible incorrect restart track when playing
  • 1b81e58 FullscreenUI: Avoid double transition on achievements/leaderboards
  • 865ed04 FullscreenUI: Fix toggling between windows with hotkeys
  • 3496b62 FullscreenUI: Fix bullet separator at end of postfx settings
  • 61f9548 FullscreenUI: Use popup list for texture filter options
  • 24ecfdd Misc: Use C++23 elifdef/elifndef
  • d01e2ca System: Obey optimal frame pacing setting on Linux
  • 187ad8f GPUDevice: Remove multiple sources of truth for shader dump directory
  • bce5e3d StringUtil: Fix buffer overflow in BytePatternSearch()
  • 73b571c Timer: Use pause intrinsics when spin-sleeping
  • 3622df2 Common: Use __yield() for CPU-pause on ARM
  • 2287451 PageFaultHandler: Fix unused variable warning
  • fc8675c dep/vixl: Fix deprecated-literal-operator warning
  • 60a798c StringUtil: Return first match in BytePatternSearch()
  • 42cf88c dep/googletest: Update to v1.18.0
  • 831305b Threading: Detect recursive locks in debug builds
  • 4653247 Error: Add wrappers for translating messages without object
  • 1067ebe HTTPDownloader: Use string view and move semantics for callback error
  • 46fca8f HTTPDownloader: Ensure all callbacks invoke through PollEvents()
  • 31a6103 Settings: Turn debug window visiblity into a bitmask
  • 5684d1b Achievements: Replace recursive mutex with lightweight mutex
  • 8f99b60 Qt: Add missing help text for savetitle/localizedtitle
  • 4cd6e30 FullscreenUI: Replace recursive_mutex with lightweight mutex
  • 108e721 FullscreenUI: Allow verification of runtime-populated images
  • 4224e9a Updater: Directly wait for parent to exit instead of using shell
  • 2c9866e Qt: Dynamically adjust log window colours to theme
  • 3cb7b06 Disable auto analog in Trap Gunner; add missing traits for Spyro x Sparx (#3801)
  • 4730259 Tests: Fix directory not cleaned up
  • 8148a81 Threading: Add SharedMutex lightweight wrapper
  • f0fb6f7 Achievements: Avoid deadlock with leaderboard trackers disabled
  • 7326f90 Achievements: Avoid lock when settings unchanged
  • 31d4405 Achievements: Use a second mutex for notification state
  • 86b333d Qt: Fix per-game achievement notification duration sliders
  • bbd8425 Qt: Simplify output latency widget updates
  • cd50666 Qt: Bind audio output volume through regular settings updates
  • 288eee1 Update duckstation-qt_es.ts (#3802)
  • 8e4dbf1 Qt: Fix latency description not updating
  • 0d8dda3 Spanish (Spain) translation update 2026/09/24 (#3803)
  • 62299a5 LightgunController: Create base class for lightgun controllers
  • e68536d NeGcon: Create common base class for NeGcon controllers
  • d9cb895 Controller: Unify some of the translation strings
  • 73b5a24 Threading: Add SharedLockGuard helper
  • 687178a InputManager: Internalise private functions
  • ee8b45a InputManager: Use atomics for rawinput/pointer count
  • 58efbb8 InputManager: Use atomics for host pointer position
  • 0ae22c1 ImGuiManager: Read pointer state directly from InputManager
  • 501d3a9 InputManager: Reload input bindings after source hotplug
  • d76435c InputManager: Extract internal state to private header
  • eed22aa InputManager: Use a shared mutex for synchronization
  • 7a8e8a0 InputManager: Use SmallString for binding conversions
  • aa77ed5 Qt: Move DS5 player LED setting into LED dialog
  • 64b1e2b SDLInputSource: Simplify polling
  • 59e2f1d SDLInputSource: Poll immediately after initializing
  • 7495b76 SDLInputSource: Rely on reload to enable accelerometer
  • edd41df SDLInputSource: Use persistent identifiers when mapping
  • d040783 GameList: Fix possible null string-view construction
  • bbebc31 Common: Use second thread for assertion dialogs
  • 608a0c3 Common: Use single isb for ARM PauseCPU()
  • 4c721f3 VideoThread: Use dynamic spin loop on ARM
  • 85c4ace Timer: Use global initializer for timer frequency on Windows
  • 202c7d8 Qt: Add pill-label css class
  • 8293e84 Qt: Display bound devices in controller pages
  • 62e4845 Win32RawInputSource: Fix wrong OnInputDeviceConnected() call
  • a2aa729 GameList: Use correct string_view constructor
  • 79fc545 Common: Remove unnecessary include
  • f9e12bb Qt: Simplify mute setting callback
  • 56dbfea Qt: Fix doubled-up help description
  • f1359f0 Update duckstation-qt_es.ts (#3805)
  • f9ba754 Atualização Português do Brasil (#3806)
  • a2edf2d Update Italian translation (#3807)
  • 0619481 MetalDevice: Drop feedback loop path
  • dc4e772 VulkanDevice: Fix incorrect hazard tracking in stream buffer
  • 5e54cad GPU/HW: Fix background replacements disappearing after TC toggled off
  • 10632b9 GPU/HW: Simplify pipeline layouts
  • 2ab88c6 ImGuiManager: Move blur constants into main UBO
  • 2859162 GPUDevice: Remove MultiTextureAndUBO pipeline layout
  • de1fd8c GPUDevice: Move UNIFORM_PUSH_CONSTANTS_SIZE into base class
  • 9fcff15 D3D12Device: Remove MAX_UNIFORM_BUFFER_SIZE
  • d901b25 D3D12Device: Ensure all samplers are initialized in LookupSingle()
  • f3d2843 FullscreenUI: Add background image blurring for headers
  • c4b4496 FullscreenUI: Display subset icon as game icon in subset view
  • 616c41d ImGuiManager: Stash overlays in separate draw list when transition active
  • d78fd23 ImGuiManager: Avoid unsafe read of context pointer on core thread
  • 8a46ed8 Misc: Replace std::shared_mutex with Threading::SharedMutex
  • 60f7ffa GPU: Fix scanline sync before vertical_display_start
  • bfb23fb GPU: Improve CRTC function readability
  • 41c1fb1 Qt: Use posix_spawn for updater relaunch on Linux
  • a429876 Misc: Remove more unused include guards
  • 4091d29 FullscreenUI: Fix change disc menu getting stuck in some scenarios
  • 2c1fba1 FullscreenUI: Size loading screen text and progress separately
  • b3b2bbc FullscreenUI: Display progress for on-demand game list load
  • 2d8e5b6 MDEC: Don't clear output FIFO on new command
  • 8d42a0c FullscreenUI: Fix compiler warning
  • 003ff5a Qt: Update machine translations
  • 39a1e37 Qt: Update English translation catalog
  • 4d3dadd CDImageMemory: Read each sector in its native format
  • e68431f CDImagePPF: Handle non-mode2 sectors
  • 3f037f2 CDImageCHD: Read out the correct sector size depending on mode
  • 8fa9ef5 FullscreenUI: Fix focus reset on escape in game list search
  • acad156 Deps: Update to 20261001
  • 14c2267 Qt: Use AppRoot for translations
  • fd88101 VulkanDevice: Fix spec violation in ROV clear
  • 9d00d6b GPU/HW: Use correct format for ROV buffers
  • 4122fed INISettingsInterface: ClearSection() should not create an empty section
  • a304c04 Update duckstation-qt_es.ts (#3808)
  • 898b6a3 GameDB: Fix a bunch of incorrect release dates
  • baf6c42 System: Fix incorrect title being copied into save state header
  • 697599c CI: Use prefix path in cross appimage
  • e0668ba Achievements: Don't lock in prefetch callback
  • df80597 Achievements: Don't try to fetch badges without cache
  • 6c1645f Qt: Fix default value of HideCursorInFullscreen (#3809)
  • cbcbbe1 GameDB: Disable auto-analog on Khamrai
  • 21b0555 Qt: Fix desktop environment conditions
  • 9cb25f7 Qt: Fix crash when desktop file check is skipped
  • cf71020 D3D11Device: Fix race when creating pipelines from worker threads
  • b3ab322 OpenGLDevice: Pad push constant range to 16 bytes
  • 00e2997 OpenGLDevice: Request coherent persistent buffer mappings

Don't miss a new duckstation release

NewReleases is sending notifications on new releases.