178 Commits

Author SHA1 Message Date
Stenzek
741e971681
GPU/HW: Add 'True Color (Full)' dithering mode
This is equivalent to the old 'True Color' mode.

The new 'True Color' mode truncates flat-shaded sprites/polygons
to 16-bit color before drawing. Doing so fixes:

- Menu background in Breath of Fire IV.
- Loading background in JumpStart Wildlife Safari - Field Trip.
- and other similar games.
2025-03-22 18:32:31 +10:00
Stenzek
58dc7562a3
GPU/HW: Add in-pass clear depth pipeline
Instead of clearing the entire buffer, we only need to wipe out the
current drawing area. Saves a decent chunk of memory bandwidth in games
that end up spamming clears.
2025-03-07 21:33:06 +10:00
Stenzek
3ea26cc910
GPU: Rewrite automatic resolution scaling
Make it play nice with rewind/runahead.
2025-02-21 23:58:05 +10:00
Stenzek
e0a9bbe600
PostProcessing: Move into GPU presenter
Means that the renderer can be changed without reloading shaders,
and speeds up config change detection.
2025-01-18 22:59:48 +10:00
Stenzek
6cba825bac
System: Add fatal error shutdown path
Switch to a null backend and shut down the system instead of crashing.
2025-01-18 22:59:48 +10:00
Stenzek
d52bf795e4
GPU: Split backend into Backend+Presenter 2025-01-18 22:59:48 +10:00
Stenzek
45b500bc2c
GPU/HW: Fix draw call count spiking in some scenarios 2025-01-15 22:50:29 +10:00
Stenzek
ee1da343ab
GPU/HW: Use default initialization for BatchConfig
Reduce the risk of below...
2025-01-12 00:03:45 +10:00
Stenzek
9779cee934
GPU/HW: Ensure texture window bits are initialized
Fixes broken rendering after loading state or switching renderer in some
games, e.g. GTA2.
2025-01-12 00:03:18 +10:00
Stenzek
670dc461c1
GPU/HW: Slight re-shuffling of field offsets
Free up some bits in the middle.
2025-01-07 23:20:26 +10:00
Stenzek
b9186139d0
GPU/HW: Use sized tristrips instead of fullscreen quads 2025-01-07 23:20:25 +10:00
Stenzek
cae1ddc971
GPU: Ensure batches are flushed before presenting frame
Fixes occasional assertion failing when using the debugger.
2025-01-07 12:28:15 +10:00
Stenzek
b7832e609f
GPU/HW: Vectorize flipped sprite handling 2024-12-29 17:25:55 +10:00
Stenzek
799f5bdf97
GPU: Assume vertex commands are 8-byte aligned 2024-12-28 20:24:22 +10:00
Stenzek
74fd217afb
GPU/HW: Always update/load/save CLUT
We have the headroom with multithreading now, and it prevents issues
saving/loading state in loading screens in some games.
2024-12-28 20:24:21 +10:00
Stenzek
c99625e4c3
GPU: Move vertex culling to GPU thread
i.e. push all primitives through unless they are oversized, which the
GPU will definitely skip.

Needed because of coordinate truncation in Final Fantasy VIII, these
scenes will now render correctly with the software renderer again.
2024-12-28 20:24:09 +10:00
Stenzek
b8fa97e1a7
GPU: Fix sprite texture filtering with TC enabled 2024-12-24 00:24:37 +10:00
Stenzek
9a22ac3c70
GPU/HW: Download VRAM when enabling sw-for-readbacks 2024-12-23 17:55:47 +10:00
Stenzek
0b4e302c22
GPU: Implement PGXP for lines 2024-12-22 16:48:45 +10:00
Stenzek
62285dcf33
Settings: Split into GPU and main settings
That way the GPU thread copy doesn't need fields it never touches.
2024-12-21 14:53:15 +10:00
Stenzek
2d659fc3eb
GPU: Move backend work off CPU thread 2024-12-19 23:32:15 +10:00
Stenzek
831c982f3b
System: Rewrite memory save state handling
Makes it more friendly to GPU thread.
2024-12-19 22:42:28 +10:00
Stenzek
57595c47af
GPU/TextureCache: Move replacement cache onto the GPU
And enforce a maximum. Should sort out the upload spam.
2024-11-25 19:37:28 +10:00
Stenzek
3ff1b04576
GPUDevice: Support generating mipmaps 2024-11-24 23:29:28 +10:00
Stenzek
5c03e1d940
Misc: Fix alignment errors on ARM32 2024-11-23 18:52:45 +10:00
Stenzek
c6b74684de
GPU/HW: Split shaders into resolution independent/dependent
Avoids recompiling everything on resolution change.
2024-10-27 15:15:20 +10:00
Stenzek
1ae2dcf192
GPU: Propagate initialization error to caller
Avoids double error popup.
2024-10-26 01:41:29 +10:00
Stenzek
43ed92415d
GPU/HW: Fix assert triggering in debug mode 2024-10-19 17:05:06 +10:00
Stenzek
71bb953253
GPU/HW: Handle redundant texture window updates
Significantly reduces draw count in THPS2.

~150 draw calls per frame to ~70.
2024-10-05 13:06:45 +10:00
Stenzek
e06f1f1002
GPU: Add hardware texture cache 2024-09-29 13:37:47 +10:00
Stenzek
fd8f97f4d3
GPU/HW: Fix adaptive downsampling
Also rewrite shaders to improve blurring around edges of 3D objects
(e.g. FF7).

As a trade-off, the background does blur slightly less, but (imo)
it looks better overall, since you'll notice the foreground being
blurred much more than the background.
2024-09-26 13:25:53 +10:00
Stenzek
986e207cff
GPU/HW: Make batch shaders independent on resolution
Almost a 6x reduction in *compressed* shader cache size.
2024-09-22 21:06:05 +10:00
Stenzek
b5df06a54a
GPU/HW: Rewrite automatic internal resolution selection
Make it aspect ratio aware, as well as updating when/if the game changes
resolution. Also include the padding area in the OSD/status resolution.
2024-09-21 22:26:05 +10:00
Stenzek
7f4e5d55db
Misc: Update copyright headers 2024-09-01 22:08:31 +10:00
Stenzek
a2f98541b3
Misc: Slim down some header includes 2024-08-04 14:49:55 +10:00
Stenzek
2a617c505a
GPU/HW: Support using ROV for accurate blending 2024-07-23 14:46:06 +10:00
Stenzek
298f39a0c8
GPU/HW: Fully report shader/pipeline creation failures 2024-07-22 15:43:18 +10:00
Stenzek
59a2309a83
GPU: Use half width vector types where appropriate 2024-07-14 21:25:48 +10:00
Stenzek
ed5a99066f
GPU: Cull off-screen sprites/lines
And further optimizations to culling in general.
2024-07-06 22:13:46 +10:00
Stenzek
87f2995f3d
TextureReplacements: Namespace-ify 2024-07-04 15:52:32 +10:00
Stenzek
2bcb85d431
GPU/HW: Push all draws/writes through a common path 2024-07-03 15:44:12 +10:00
Stenzek
9ef7e8c5d0
GPU/HW: Use GSVector instead of Rectangle 2024-07-03 15:44:12 +10:00
Stenzek
044d7a4797
GPU: Eliminate heap allocation on state load 2024-07-03 00:24:12 +10:00
Stenzek
34d5cdec96
GPU/HW: Expose depth buffer to internal postprocessing 2024-06-29 14:25:36 +10:00
Stenzek
e39a2d00bf
GPU/HW: Use D32F for PGXP depth
16-bit isn't accurate enough for post processing.
2024-06-29 13:09:45 +10:00
Stenzek
80d1056ddf
GPU: Add virtual call when buffers are swapped 2024-06-28 21:15:47 +10:00
Stenzek
810ce1ce57
GPU: Remove duplicate display params fields
And enable postfx when the DAC is turned off.
2024-06-28 20:17:15 +10:00
Stenzek
34f20798a1
GPU/HW: Add separate 3D/2D (sprite) texture filtering 2024-06-17 15:56:56 +10:00
Stenzek
be4abb016f
GPU/HW: Reduce multiple setting source of truth 2024-06-17 15:49:12 +10:00
Stenzek
8455c9c3c6
GPU/HW: Add 'Force Round Upscaled Texture Coordinates' 2024-06-16 19:09:46 +10:00