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.
2026-10-25 12:48:59 +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
6caf8b2ede
Android: Update translation strings
2026-10-25 01:06:24 +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
796c4751b7
GameDatabase: Use PackedOptional for overrides
2026-10-24 18:56:37 +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
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
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
611c96dec5
CPU/PGXP: Add logging of RTPS
2026-10-24 14:12:14 +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
Stenzek
d9386a2f83
Qt: Add setting overrides to patch code editor
...
Also preserves overrides and DisallowForAchievements when a code is rewritten.
2026-10-22 12:54:54 +10:00
Stenzek
7ea70e3f05
Qt: Add manual patch editing/deletion to patches tab
2026-10-22 12:31:02 +10:00
Stenzek
a47084fea8
Android: Update translation strings
2026-10-21 22:12:57 +10:00
Stenzek
b01a4163e9
GameList: Fix incorrect ps-exe hashes
2026-10-21 01:30:34 +10:00
Stenzek
9744816e8b
Qt: Move modulation crop to debugging settings
...
Makes the window shorter again.
2026-10-20 19:31:33 +10:00
Stenzek
1857775612
GameDatabase: Add ForceMidFrameScanout
2026-10-20 19:00:03 +10:00
Stenzek
7a984ce3a5
GPU: Add mid-frame scanout option
...
Scans out the lines displayed so far when the display start address changes mid-frame, for split-screen
effects such as in Dreams. Opt-in, because games that swap buffers mid-frame will tear.
2026-10-20 18:03:26 +10:00
Stenzek
7531ac5b41
GPU/SW: Fix out-of-bounds read in interlaced 15-bit scanout
...
The fast path check didn't account for line skipping, so it could read past the end of VRAM.
2026-10-20 16:40:47 +10:00
Stenzek
1b3379dff2
Settings: Turn PGXP CPU Mode / Vertex Cache into an override
...
Automatic uses the database preference. Enabled/Disabled override the
database and display a warning.
2026-10-20 16:40:47 +10:00
Stenzek
124a4b16fe
Android: Update translation strings
...
Also remove stale strings from translations.
2026-10-19 22:33:04 +10:00
Stenzek
34bd6e055f
Achievements: Save avatar URL in settings
...
Fixes badge showing as placeholder while achievements are disabled.
Mainly useful for Android where the core doesn't start until a game
does.
Also fixes the reversed score display in the Big Picture landing.
2026-10-19 21:07:55 +10:00
Stenzek
a2f8455b68
GPU/HW: Defer cover lookup until needed
2026-10-19 20:44:44 +10:00
Stenzek
146d8ee0cf
CMake: Add DISABLE_SIMD option
...
Forces the scalar/nosimd code paths for testing on x64/ARM.
2026-10-19 20:40:32 +10:00
Stenzek
bf550e7924
CPU/Recompiler: Cancel incoming load delay on a load to the same register
...
A load in a branch delay slot followed by a load to the same register at the
start of the next block exposed the first value.
2026-10-19 20:34:26 +10:00
Stenzek
591f9fba25
CPU/Recompiler: Check events when linking truncated blocks
...
The interpreters check after every block, so events could fire at a
different point.
2026-10-19 20:34:26 +10:00
Stenzek
932a2b87bb
FullscreenUI: Fix loading screen blur with prerotation
...
RenderDisplay() expects the unrotated size as the target size.
2026-10-19 19:51:36 +10:00
Stenzek
734141f456
FullscreenUI: Fix shader backgrounds with prerotation
...
Rotate the position in the vertex shader so v_tex0 stays in window orientation.
2026-10-19 19:51:36 +10:00