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