v0.1-11752Desktop
Added 7
- Display OSD warning when resampling audio
- Add InputTextWithSuffix() to FullscreenUI
- Add refresh button to border overlay list in Qt
- Add version information and filenames to BIOS list
- Allow empty recommended value in settings help in Qt
- Add CollapsibleWidget to Qt
- Add BIOS Installer and improve BIOS setup page in Qt
Changed 5
- Resample audio when encoder doesn't support 44.1KHz
- Rework media capture menu in Qt
- Rename softcore to casual in Achievements
- Improve emulation accuracy in Timers
- Default to H264 on all platforms in MediaCapture
Fixed 7
- Fix incorrect samples on buffer wrap-around in MediaCapture
- Fix possible corruption in audio-only capture
- Ensure overlays directory exists in user resources
- Fix volume sweep termination conditions in SPU
- Fix crash opening game settings in Qt
- Fix main window language not updating after setup wizard
- Fix BIOS summary not updating on language change in Qt
Removed 1
- Remove Flush() method from MediaCapture
From DuckStation
Commits
- 381ac7d1e MediaCapture: Fix incorrect samples on buffer wrap-around
- b3d594a9a MediaCapture: Remove Flush() method
- 4f72f4034 MediaCapture: Fix possible corruption in audio-only capture
- 049437e42 MediaCapture: Resample audio when encoder doesn't support 44.1KHz
- 8b9aaf787 MediaCapture: Display OSD warning when resampling
- d33d3b82c Qt: Rework media capture menu
- 6e0fb1e14 FullscreenUI: Add InputTextWithSuffix()
- e2e4bae61 Settings: Ensure overlays directory exists in user resources
- 56fa9dc61 Qt: Add refresh button to border overlay list
- 12f012caa Spanish (Spain) translation update 2026/07/27 (#3777)
- dc75335a7 Scripts: Translation tools experiments
- 551aaa439 RegTest: Fix compile error
- 8747aa183 Atualização Português do Brasil (#3778)
- 4a04d3143 SPU: Fix volume sweep termination conditions
- f6c4fe987 Achievements: Rename softcore to casual (#3779)
- 2246697be BIOS: Add version information and filenames to list
- 145474389 Qt: Allow empty recommended value in settings help
- 30d351e4e Qt: Add CollapsibleWidget
- 8dbc47606 Qt: Add BIOS Installer and improve BIOS setup page
- 351778e44 Qt: Update machine translations
- 406f325b2 Qt: Fix BIOS summary not updating on language change
- 9c7c23f48 Qt: Fix main window language not updating after setup wizard
- 57b952ab2 Timers: Improve emulation accuracy
- 7c93a61ee Qt: Further simplify BIOS setup wizard page
- 07401690b Qt: Fix crash opening game settings
- 202923da5 Qt: Correct some clearly awful translations
- 7111f4c12 Update duckstation-qt_es.ts (#3780)
- b5a990bbd MemoryCard: Use constants for address and offset mask
- c42082c4b StateWrapper: Avoid heap allocation in FIFOQueue read
- f3d0e84b0 StateWrapper: Avoid possible integer overflow on 32-bit systems
- 865fd9e57 StateWrapper: Save contiguous FIFOQueue bytes in one memcpy()
- 97400d2d0 StateWrapper: Clamp enum values to max
- b147f1ffd FIFOQueue: Zero out head/tail when size reaches zero
- e95e5a0d2 FullscreenUI: Right-align achievement type badges
- 18147a175 GPUBackend: Fix possible unflushed draws with runahead enabled
- 4d700e468 MDEC: Ensure direct FIFO writes don't overflow
- 26fa2ee4a MetalDevice: Fix a few leaky object retains
- c07bf47d6 CDImageCue: Validate bits-per-sample for wave files
- ecbe3c3b7 MemoryCardImage: Don't over-enumerate directory frames
- 76f01d8c9 Misc: Fix under-allocation in sjis2utf8()
- d6d8a7be1 CDImageCue: Fix implicit truncation warning
- e86af51c8 Deps: Update bundled ffmpeg headers to 9.0
- 6d0feff2f Deps: Update to 20260805
- 3fed119df MediaCapture: Default to H264 on all platforms
- 12a4a2648 Util: Avoid intermediate memory allocation in Shift-JIS conversion
- 8a2c05ce5 Image: Avoid integer overflow for dimensions
- 99fc655fa Updater: Fix possible path traversal during preprocessing
- ebd090340 Updater: Fix possible infinite loop
- 1fbfbb57d System: Fix implicit 32-bit truncation of screenshot size
- 2c8e998da Spanish (Spain) editing pass - 2026/08/05 (#3781)
- 6e242f5cb Bus: Flush line buffer after 512 characters
- ca5cc7374 GPU: Add missing serialization of polyline buffer
- f92b1a81d GPU: Add some simple checks to the polyline buffer
- cd5e48af9 StateWrapper: Add max size checks to vector/string data
- 2688a1dfc Achievements: Fix possible read past end of memory in callback
- e48b3e302 Cheats: Fix possible OOB reads in malformed instructions
- d3ff0b364 PSFLoader: Add missing header size checks when loading
- a8a098a0a Common: Valid BCD functions should return boolean
- b9cf3bbf0 CDImagePBP: Add missing validation of BCD digits
- 467d0971b CDImagePBP: Check SFO index table count before reading
- e0734381a CDImageMDS: Fix a bunch of possible buffer overreads
- 6651f4d19 ISOReader: Fix possible integer overflow in GetSizeInSectors()
- f1029b2df AnimatedImage: Fix possible integer overflow of dimensions
- f11b43227 System: Add option to install BIOS when missing
- 8778034bf RegTest: Fix compiling again
- e175c8422 Bus: Pack state in struct
- 5245a58b0 Settings: Fix invalid memory card values after install
- 213c5b450 VideoPresenter: Use transfer pitch for screenshots
- b3b57a2a0 VulkanDevice: Bind initial compute pipelines correctly
- bbac943b5 VulkanDevice: Expose shared UBO binding to compute shaders
- fc3e117f8 VulkanDevice: Synchronize compute image accesses
- 4b5edbb85 VulkanDevice: Preserve mapped texture upload pitch
- 6584adde9 VulkanDevice: Fix download buffer barrier ranges
- 037ee47f7 VulkanDevice: Validate imported host buffer memory
- 668f39fab VulkanDevice: Wait for presentation before swapchain teardown
- 846236538 VulkanDevice: Address texture array subresources
- 5f40f0ac1 VulkanDevice: Select advertised surface format pairs
- 40e178787 VulkanDevice: Fix legacy render pass attachments
- d1720c040 VulkanDevice: Respect fixed surface extents
- a8de757b9 VulkanDevice: Store compute specialization values
- 7b690ec1f VulkanDevice: Reset descriptor builder storage
- 69c5051a8 D3D12Device: Restore state after mipmap rendering
- a8c9324f4 D3D12Device: Transition cleared compute targets to UAV
- 6e2f06a55 D3D12Device: Bound persistent descriptor allocation
- 227389010 D3D12Device: Create texture arrays with all layers
- b5f821bf4 D3D12Device: Transition all uploaded subresources
- 402f9207f D3D12Device: Set render-pass clear formats
- a4a03c476 D3D12Device: Assert alignment of download texture footprints
- 685cf83c8 D3D12Device: Order dependent compute UAV accesses
- 7b1596120 D3D12Device: Fix incorrect push constant root parameter index
- 41ee40215 D3D12Device: Track readback source usage
- 48a1a06f5 Qt: Don't try to load HTTP URLs as animated images in game list
- 2f9c58762 FullscreenUI: Fix shared memory card selection
- 4431915b4 FullscreenUI: Expose multitap memory cards
- 6f704d405 FullscreenUI: Fix shared card name not disabling if unused
- ee21478ad GPU/HW: Don't miss updating read texture for recursive draws
- f7797b57e Controller: Add 'Disable Simultaneous Opposing Cardinal Directions' option
- 0697597c5 Controller: Make mandatory functions pure virtual
- d92fe3dac Data: Move all PromptFont glyphs to unallocated range
- f04e08b24 GDBServer: Fix stop reply acknowledgements
- 1a9379bd6 GDBServer: Support continue addresses
- a36b75716 GDBServer: Support single-step addresses
- c7324e333 GDBServer: Preserve unchanged resume state
- 05166d1a7 GDBServer: Track the last stop signal
- 3885778a2 GDBServer: Reply to invalid command arguments
- aea374641 GDBServer: Validate complete packet fields
- 4e0940500 GDBServer: Apply register writes atomically
- 7c279dc96 GDBServer: Invalidate code after memory writes
- 8d7046a89 GDBServer: Bound remote packet sizes
- 60a4ec363 GDBServer: Queue complete protocol packets
- 54d074fb6 GDBServer: Retransmit rejected replies
- cba85882a GDBServer: Reject oversized incoming packets
- d176e31aa GDBServer: Support signal resume packets
- fe32554cc GDBServer: Restore run state after disconnect
- c2418520e GDBServer: Notify host when first/last client connects/disconnects
- 0a00cbc3c GDBServer: Send invalid instead of zero values for extra registers
- ac6d89919 GDBServer: Disable nagle buffering on connect
- 71c88506e GDBServer: Track breakpoint ownership
- e3bea1978 GDBServer: Expand watchpoint ranges
- b147ed63d CPU: Enumerate actions for callback breakpoints
- 86360211b GDBServer: Report watchpoint stop details
- fa5e11116 GDBServer: Use indexing instead of range-based for
- 30fa5b4c4 Qt: Rename background controller poll to idle update
- c7f282f18 Core: Use multiplexer to idle sleep for GDB server
- 3bb39f4e3 ELFFile: Skip embedded PS-X EXE header segments
- 2cf108618 GDBServer: Fix unused capture warning
- cf2495759 Qt: Implement mouse capture using CoreGraphics
- e2b78d4ca Qt: Tie relative mouse state to the active window
- 8c1a2022e GDBServer: Expose target memory map and registers
- c8abcf4b2 GDBServer: Expose GTE registers
- 8a96948a8 GPUDevice: Use same buffer sizes across backends
- 89fb3ad33 DMA: Hardwire reverse direction for OTC
- d59fcfb9d ImGuiManager: Support rendering Hebrew text
- 8ec85e305 Qt: Update machine translations
- 232c9ad9f Achievements: Make password login asynchronous
- 2c3261209 Qt: Simplify logout callback
- 9f9009d64 Achievements: Ensure callbacks run on core thread for RAIntegration
- 04f4f1ba2 Achievements: Respond to RAIntegration reset request
- 1f925f86e Misc: Add a couple of missing fmt/format.h includes
- b2f9c8fba Misc: Fix deprecated implicit conversion of fstring->string_view
- c130fc12c dep/fmt: Update to v12.2.0
- 5ee1d2569 GameDB: Disable PGXP/WS in Vanark
- 5fd366809 Achievements: Don't double-free login callback on request failure