12939 Commits
Author SHA1 Message Date
Stenzek dd4a0eb779 GPU/HW: Track dirty depth rect to shrink depth merges/clears
Merges and drawing area clears now only cover what was drawn with depth
since the last clear.
latest
2026-10-25 12:48:59 +10:00
Stenzek 8d9f6e8bf7 Data: Update SDL game controller database 2026-10-25 01:37:45 +10:00
Stenzek 7763167550 VideoPresenter: Probe for presentation backlog when gap baseline rises
Otherwise lag left by a long hitch, e.g. a system overlay, resizing window,
etc. looks normal and is never dropped.
2026-10-25 01:37:18 +10:00
Stenzek 3551eef7f8 VideoPresenter: Split late present check out of ShouldPresentFrame() 2026-10-25 01:37:09 +10:00
Stenzek 85fe47af8e VulkanDevice: Wait for presents with VK_KHR_present_wait
Acquiring the next image doesn't always block until the frame is displayed,
so late frames weren't detected.

Note: On NVIDIA drivers at least, this gives you a whacky frame time
graph with vsync on. But it's actually better input latency, comparable
to D3D.
2026-10-25 01:36:32 +10:00
Stenzek 6caf8b2ede Android: Update translation strings 2026-10-25 01:06:24 +10:00
Stenzek c5ffc4a978 Data: Add MC_SSAO.fx 2026-10-24 23:01:50 +10:00
Stenzek c71899031e GPU/HW: Accumulate PGXP depth across depth buffer clears
Gives postprocessing depth for the whole frame, not just the last segment.
2026-10-24 19:28:08 +10:00
Stenzek d691f5ae21 Regtest: Split -setting key at the last slash
Allows nested sections such as InternalPostProcessing/Stage1.
2026-10-24 19:14:27 +10:00
Stenzek 113f297a05 PostProcessing: Fix crash loading ReShade shaders without a swap chain 2026-10-24 19:14:27 +10:00
Stenzek 796c4751b7 GameDatabase: Use PackedOptional for overrides 2026-10-24 18:56:37 +10:00
Stenzek 507e249522 Common: Add PackedOptional class
Move the valid bit outside of the value, so we don't waste struct
padding bytes.
2026-10-24 18:56:05 +10:00
Stenzek d512707236 GPU/HW: Bias PGXP depth towards the camera by draw order
Fixes Z-fighting with near-coplanar polygons such as road markings,
building decals, etc.
2026-10-24 18:40:58 +10:00
Stenzek 7200c8ce2f CPU/PGXP: Add option to normalize depth by GTE matrix scale
Some games shrink the view transform of distant objects to stay within 16-bit range,
making raw Z incomparable between objects. Divide it by the rotation matrix's Z row scale.
2026-10-24 17:37:41 +10:00
Stenzek 1d508acef7 GPU/HW: Store reciprocal Z in PGXP depth buffer
Screen-space interpolation of W gave incorrect depth inside sloped polygons.
1/z interpolates correctly, and reversing it keeps float precision at distance.
2026-10-24 17:36:08 +10:00
Stenzek db0b5535d2 Qt: Fix stale mouse grab after recreating display widget
QWidget::releaseMouse() clears the grabber even when called on a non-grabber,
so the old widget's deferred release orphaned the new widget's window grab.

Fixes stuck mouse input with Mouse controller when toggling pause in fullscreen.
2026-10-24 16:24:00 +10:00
Stenzek 8db5d62076 Qt: Tweak bold group box headings 2026-10-24 15:12:11 +10:00
Stenzek 450bc59447 Qt: Add icon next to device indicator in bindings 2026-10-24 15:05:22 +10:00
Stenzek 167c6e3323 Misc: Fix gitattributes typo for vcxproj filters 2026-10-24 14:50:59 +10:00
Stenzek efc6ff524b Controller: Produce center for equal opposing half-axis inputs 2026-10-24 14:50:46 +10:00
Stenzek c6747677b4 Controller: Initialize analog axes to AXIS_CENTER
Fixes Persona 2 up/down not working after resuming state until X is moved.
2026-10-24 14:50:31 +10:00
Stenzek 43268aa6e9 Controller: Restore 127 as the analog axis center
Persona 2 breaks with pure up/down input when the X axis reads exactly 0x80.
2026-10-24 14:50:31 +10:00
Stenzek de1cb7225d Cheats: Add override for ForcePGXPPreserveProjectionPrecision 2026-10-24 14:12:16 +10:00
Stenzek d9880a923a Tests: Add PGXP CPU shift, bitwise and ADDI tests 2026-10-24 14:12:16 +10:00
Stenzek 7c143e4329 CPU/PGXP: Use double precision and only valid components in ADDI 2026-10-24 14:12:16 +10:00
Stenzek 1648a292cb CPU/PGXP: Keep precision through ANDI/ORI that don't change the lower half 2026-10-24 14:12:16 +10:00
Stenzek e67b8528bc CPU/PGXP: Keep precision through OR/XOR with zero, prefer precise sources
OR/XOR with zero is now a move like in the recompiler, instead of dropping
fractions in natively zero halves.
2026-10-24 14:12:16 +10:00
Stenzek 8404d325a6 CPU/PGXP: Extract the upper half directly in right shifts of 16 or more
Precision was lost when the native upper half was 0 or -1, the validity of the
upper half wasn't moved to the lower half, and a negative lower half was off by one.
2026-10-24 14:12:15 +10:00
Stenzek f86e410937 CPU/PGXP: Don't use invalid components in shifts 2026-10-24 14:12:15 +10:00
Stenzek fa591af76c CPU/PGXP: Take the upper half sign from the precise value in right shifts
When the native upper half is only sign bits, it could disagree with the sign
of the precise value, giving a value 65536 away. Fixes the Rage Racer sky.
2026-10-24 14:12:15 +10:00
Stenzek c90e55081e CPU/PGXP: Don't leave shifted-out bits in the upper half in right shifts
The bits shifted out of the upper half were left there as a fraction as well as
being moved into the lower half, breaking the sky in Rage Racer.
2026-10-24 14:12:15 +10:00
Stenzek 6eef7c84c0 CPU/PGXP: Mirror GTE halfword register extension in MTC2/LWC2
Garbage in the upper halfword caused the shadow to mismatch the register and
lose its precision on the next read.
2026-10-24 14:12:15 +10:00
Stenzek 48f9b6ada3 CPU: Pass SLTIU source to PGXP before it is overwritten 2026-10-24 14:12:15 +10:00
Stenzek d21600bd1a CPU/PGXP: Use the native result for SLT/SLTU/SLTI/SLTIU
Comparing the halves separately could give a different result to the CPU,
and SLTIU recorded the comparison against the zero-extended immediate.
2026-10-24 14:12:15 +10:00
Stenzek 299a3b1678 CPU/PGXP: Use the native result for division by zero
Avoids converting inf/NaN to integers when the divisor is zero.
2026-10-24 14:12:15 +10:00
Stenzek eb333a1fea CPU/PGXP: Use floor when splitting off the upper halfword
Truncation put negative fractions such as -0.5 in the wrong upper half.
2026-10-24 14:12:15 +10:00
Stenzek 560be2279a CPU/PGXP: Carry and wrap fractional values at the real halfword boundary
Values between 65535 and 65536 (or 32767 and 32768 in the upper half) were
carried a whole halfword early.
2026-10-24 14:12:15 +10:00
Stenzek d7a74d2010 CPU/PGXP: Fix ADD/SUB losing depth when the destination is a source 2026-10-24 14:12:14 +10:00
Stenzek e90b83bd37 CPU/PGXP: Track precision through GTE GPF/GPL 2026-10-24 14:12:14 +10:00
Stenzek e34d2ed754 CPU/PGXP: Fix sign of precise values crossing the 16-bit boundary in shifts 2026-10-24 14:12:14 +10:00
Stenzek 4542c1b7bb dep/cubeb: Fix WASAPI thread ready event leak on init failure 2026-10-24 14:12:14 +10:00
Stenzek 958156f060 dep/cubeb: Keep WASAPI render loop alive when reconfigure fails
Wait for the next device change or stream start instead of exiting, and
reopen streams from the render loop so it can't race with its callbacks.
2026-10-24 14:12:14 +10:00
Stenzek 0c58cca4ea dep/cubeb: Apply deferred WASAPI device reconfigure on stream start 2026-10-24 14:12:14 +10:00
Stenzek 15f023490e dep/cubeb: Reopen closed WASAPI stream on start instead of aborting 2026-10-24 14:12:14 +10:00
Stenzek b4a9a6b8f2 Tests: Update cheat metadata type 2026-10-24 14:12:14 +10:00
Stenzek 611c96dec5 CPU/PGXP: Add logging of RTPS 2026-10-24 14:12:14 +10:00
PeterDelta fbf93c3ae9 Update duckstation-qt_es.ts (#3813) 2026-10-23 21:55:00 +10:00
Stenzek 938c6d2a03 GameDatabase: Fix false positive PGXP warning 2026-10-23 20:29:46 +10:00
Stenzek 256b5ca440 CPU/CodeCache: Fix crash when cache is exhausted during compilation 2026-10-23 20:29:40 +10:00
Stenzek c2b78c1834 FullscreenUI: Add missing space in controller settings 2026-10-23 20:28:48 +10:00