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