Commit Graph
173 Commits
Author SHA1 Message Date
Henrik Rydgård b65bbaf92c Merge pull request #21678 from nintendo424/gpu-save-first-frame
gpu: Preserve first-frame font render targets
2026-05-27 12:22:47 +02:00
Henrik Rydgård 2eca0123f1 Correct culling in case of some weird viewport setups 2026-05-23 14:49:17 +02:00
Henrik Rydgård fa856fbf68 Pass the culling unit tests. 2026-05-23 14:40:15 +02:00
Henrik Rydgård 0d33cd0a65 Convert the BBOX/BJUMP culling to use the worldviewproj matrix and a screen space check. 2026-05-23 14:40:15 +02:00
Henrik Rydgård 893bc732a1 Fast culling: Use the worldviewproj matrix to avoid the need for planes 2026-05-23 14:40:15 +02:00
Henrik Rydgård 5cfbf50111 Keep updated products of view*proj and world*view*proj matrices. Use to simplify bbox culling. 2026-05-21 19:18:32 +02:00
nintendo424 e5689d1adc gpu: Preserve first-frame font render targets
Some games render HLE sceFont glyphs into small VRAM-backed framebuffers and immediately sample them as textures. This needs both the source glyph buffer and the temporary render target to be preserved before later commands overwrite or rebind them.

Save first-frame data from the previous render target before creating a new framebuffer, since ResizeFramebufFBO() makes the new framebuffer current. Also flush pending draws before PGF writes over a glyph buffer that may still be referenced by queued texture draws.

Backend software transform normally reports safe framebuffer size during draw flush, but first-frame readback can happen before queued draws reach that path. Estimate through-mode rectangle/triangle bounds before SubmitPrim() and feed those bounds to SetSafeSize(), using actual vertices clamped to scissor instead of a tiny-target heuristic.

Fixes missing text in Evangelion JO.
2026-05-15 12:23:14 -04:00
Henrik Rydgård 10759dc8b9 DrawEngineCommon: Avoid using member variables as loop counters, bad for perf 2026-01-30 14:10:36 +01:00
Henrik Rydgård 7853881210 GPU header cleanup: Avoid including GPUCommon.h in some places 2025-11-23 20:37:37 +01:00
Henrik Rydgård 44d06ec42f Add some sanity checks guided by Android crash reports 2025-06-07 16:35:19 +02:00
Henrik Rydgård 9d1f8a2575 Don't forget to update the vertex addr even when culling 2D draws
Fixes #20454
2025-06-06 17:53:49 +02:00
Henrik Rydgård 8ed898c5e6 GPU: Constify VertexDecoder pointers, remove in some cases 2025-05-14 15:13:59 +02:00
Henrik Rydgård 5d85d5ed22 Depth raster: Rename some variables, fix incorrect draw limit 2025-04-10 17:49:06 +02:00
Henrik Rydgård b080f7da6b Small depth raster refactor 2025-04-10 17:13:48 +02:00
Henrik Rydgård c23c3e8d03 Measure the available time for "background depth raster". The idea is viable. 2024-12-29 09:45:55 +01:00
Henrik Rydgård 6d539cc5e0 More fixes 2024-12-28 23:50:42 +01:00
Henrik Rydgård aec17d8829 Actually queue up depth draws 2024-12-28 23:21:54 +01:00
Henrik Rydgård 25d79afd47 Small rename, remove some obsolete reporting 2024-12-28 23:05:07 +01:00
Henrik Rydgård 1e8eb88bf0 Unify the ends of the two depth draw paths 2024-12-28 19:22:23 +01:00
Henrik Rydgård 3c3dfe5273 Reorganize depth raster draw state handling 2024-12-28 18:51:34 +01:00
Henrik Rydgård 2371fdfedd Rework depth raster to fully support software transform 2024-12-21 21:22:22 +01:00
Henrik Rydgård a344d0225f DepthRaster: Fix bug where we used the wrong vertex count. 2024-12-21 14:28:00 +01:00
Henrik Rydgård 67078d439b Depth raster: Switch to a SoA data layout for the screen space verts 2024-12-21 14:28:00 +01:00
Henrik Rydgård bdb5f3a91b Reorganize the depth vertex pipeline for future optimizations 2024-12-21 14:27:59 +01:00
Henrik Rydgård c5ad81e3d5 Add DepthRaster.cpp/h. Rasterize depth rectangles, some triangles 2024-12-21 14:27:53 +01:00
Henrik Rydgård df6ed8cfc9 Do some cleanup of #includes in GPU 2024-12-18 13:57:26 +01:00
Henrik Rydgård ee297e974d Move more code into SoftwareTransformCommon, cleanup 2024-12-18 13:57:26 +01:00
Henrik Rydgård 0b06cd1379 Actually avoid looking up the vertex decoder more than once 2024-12-17 22:42:07 +01:00
Henrik Rydgård 15b4f0c299 Lookup the decoder outside of DrawEngine 2024-12-17 19:27:01 +01:00
Henrik Rydgård 61b14df329 Delete obsolete empty function ClearTrackedVertexArrays 2024-12-17 19:15:25 +01:00
Henrik Rydgård fe4504f612 Small simplification 2024-12-17 19:15:06 +01:00
Henrik Rydgård a2a089b8c1 Remove the member function NormalizeVertices 2024-12-17 19:15:03 +01:00
Henrik Rydgård a07da939ef Some NormalizeVertices interface cleanup 2024-12-17 19:13:38 +01:00
Henrik Rydgård fec232f8a8 GPU: Move things around a little, out of DrawEngine. 2024-12-17 19:13:38 +01:00
Henrik Rydgård abb2558535 When overriding skinning in sw transform mode, don't write/restore member variables 2024-12-17 18:52:49 +01:00
Henrik Rydgård 20ecbfdf57 Pass the VertexDecoder pointer around 2024-12-17 18:24:26 +01:00
Henrik Rydgård e74101a2fb applySkinInDecode belongs in the VertexTypeID, not in the options. 2024-12-17 18:24:18 +01:00
Henrik Rydgård 190af89d9f Plumb in a GPUCommon pointer in the draw engines. (Hopefully can get rid of this later) 2024-12-15 13:53:27 +01:00
Henrik Rydgård 11dbae3457 Remove the "DispatchFlush" mechanism, not convinced it's a win 2024-12-15 13:42:05 +01:00
Henrik Rydgård d3b6d12067 Cull through-mode 2D draws against scissor rectangle
Helps texture replacement load performance in Fate Extra CCC (it does a lot
of off-screen drawing), and may help in other situations too.
2024-12-01 14:54:55 +01:00
Henrik Rydgård 858f37b8fc Add a couple of asserts (to make things error out earlier) 2024-10-17 21:01:58 +02:00
Herman Semenov b57dab2812 [GPU] Make static and const methods if possible 2024-04-05 17:04:31 +03:00
Henrik Rydgård 533fa14e27 Add a stat for number of verts decoded. It's quite high but not crazy for UFC 2010...
See #18806
2024-02-01 19:19:53 +01:00
Henrik Rydgård db94b0b696 Pass the limit on the number of indices to generate to BuildDrawingParams. 2024-01-15 10:09:04 +01:00
Henrik Rydgård 61acce195c Avoid decoding indices when we don't need them. 2023-12-20 14:25:19 +01:00
Henrik Rydgård f86189c951 Show vertex decoders separately in profiles 2023-12-19 12:25:54 +01:00
Henrik Rydgård aca3bbc9a0 DrawEngine: Remove the confusing MaxIndex accessor, replace with directly reading numDecodedVerts_ 2023-12-10 11:58:47 +01:00
Henrik Rydgård 62c936babf Flip the cull plane data around to avoid transforming each vertex multiple times. 2023-12-09 15:55:51 +01:00
Henrik Rydgård 89d8ef87ec Use a less accurate but faster frustum cull for the general draws. 2023-12-09 15:55:51 +01:00
Henrik Rydgård 0905b6a5ad Frustum-cull small draws
Some games do a poor job of culling stuff, and some transparent
sprites can be very expensive if they cause a copy.
Skipping them if outside the viewport makes sense in that case.

One example are the flame sprites in #17797 .

Additionally, we should be able to cull through-mode draws easily, this
one doesn't even try.
2023-12-09 15:55:51 +01:00