5106 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.
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