Commit Graph
38 Commits
Author SHA1 Message Date
Henrik Rydgård 65554c2ede Merge pull request #22602 from hrydgard/depth-raster-thread
GPU: Rasterize software depth on a worker thread
2026-10-16 12:37:11 +02:00
Henrik RydgårdandClaude Opus 5.5 c440d53160 GPU: Move the hardware backends' matrix commands up to GPUCommon
So a backend that isn't GPUCommonHW can use them. No change in behaviour.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 01:12:26 +02:00
Henrik RydgårdandClaude Opus 5.5 cd59a16d85 GPU: Rasterize software depth on a worker thread
The depth draws were queued and rasterized on the emu thread at each render target change, in
Wipeout about 40 small batches a frame, and around 40% of that thread's time. Now a render target
change hands the batch to a worker thread and carries on. Waiting for it is left to whatever reads
the depth buffers: DrawSync and ListSync, block transfers, framebuffer copies, showing a frame,
savestates and shutdown, and the texture cache when the texture or CLUT it reads overlaps a depth
buffer still being written.

Batches grow as needed instead of being preallocated at full size. A full batch is now handed over
and a new one started, where the draw used to be dropped.

Wipeout headless, output unchanged: 16% less wall time on a Galaxy S8 (8.2 s to 6.9 s for 10
emulated seconds). On an M1, where headless waits on the GPU, the emu thread uses 38% less CPU time.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 16:42:45 +02:00
Henrik Rydgård 61e1ef8f7a Remove the "Software skinning" option. Now always on. 2026-07-14 17:02:57 +02:00
Henrik Rydgård ae98055cec Delete a lot of legacy depth and viewport code, fix OpenGL 2026-05-30 19:07:58 +02:00
Henrik Rydgård f60e27a9b7 Just some refactoring of the GPUStatistics struct, and more use of StringWriter 2026-05-29 14:40:31 +02:00
Henrik Rydgård eb234a1563 Finish the split. Greatly simplifies the render code in EmuScreen. 2026-02-08 10:46:16 +01:00
Henrik Rydgård f01aaeafb1 Split CopyDisplayToOutput in preparation for the next step 2026-02-08 01:06:32 +01:00
Henrik Rydgård 67010ff2af Split the display layout config between landscape and portrait orientations 2025-11-05 12:49:51 +01:00
Henrik Rydgård aec17d8829 Actually queue up depth draws 2024-12-28 23:21:54 +01:00
Henrik Rydgård e4adc112ff ImDebugger: Add a basic texture browser 2024-11-29 19:30:38 +01:00
Henrik Rydgård 194b2ce076 Ge Debugger: Add a framebuffer listing, along with some plumbing 2024-11-23 23:23:48 +01:00
Henrik Rydgård 56a164a14e Handle one more error case in presentation 2024-10-28 17:02:03 +01:00
Henrik Rydgård a062e5192b Fix issue where PresentedThisFrame didn't work on SoftGPU, causing issues 2024-10-16 15:53:42 +02:00
Henrik Rydgård 33e48e9675 OpenGL: Fix some confusion between gpu->BeginHostFrame and gpu->BeginFrame, fixing black screen 2023-12-11 23:05:37 +01:00
Henrik Rydgård 6d977b4a12 Remove unnecessary struct FramebufferInfo 2023-12-02 13:56:18 +01:00
Henrik Rydgård ad8827ae70 Cleanup, address feedback 2023-05-26 10:28:10 +02:00
Henrik Rydgård 7ddcf62955 Change TODO to a better idea 2023-05-04 09:00:48 +02:00
Henrik Rydgård 451ee14ebc Don't forget to call CheckDepthUsage when using imm draws.
Fixes #17169
2023-03-23 17:14:12 +01:00
Henrik Rydgård 7a7117f2f7 Cache framebuffer copies (for self-texturing) until the next TexFlush instruction.
Fixes #17030 , or at least improves on it - for optimal performance that
big framebuffer used for bloom should be split like in Killzone, but it's not trivial.

The regression in 1.14 is fixed with this, at least.

I tried it with a few other games with no issues - it seems games are
using TexFlush when needed. But let's see if it really is safe to rely
on that...

There might also be other places we should call DiscardFramebufferCopy
in.
2023-03-01 22:42:22 +01:00
Henrik Rydgård 231f4efbbb Move some more stuff to GPUCommonHW 2023-02-26 10:33:11 +01:00
Henrik Rydgård 4c45f8a4b0 Pass in draw directly in GPUCommon::DeviceRestore, instead of awkwardly fetching it 2023-02-25 23:04:27 +01:00
Henrik Rydgård 526ba74d05 Move the shaderManager_ to GPUCommonHW 2023-02-25 19:23:07 +01:00
Henrik Rydgård c3ceb9bf70 Move assorted debug functions and similar to GPUCommonHW 2023-02-25 19:23:07 +01:00
Henrik Rydgård 807d40e095 Move the matrix loading exec functions too 2023-02-25 19:23:07 +01:00
Henrik Rydgård 8520e1dec5 Move SetDisplayFramebuffer to GPUCommonHW 2023-02-25 19:23:07 +01:00
Henrik Rydgård 71ed265c57 Move sawExactEqualDepth to GPUCommonHW 2023-02-25 19:23:07 +01:00
Henrik Rydgård bcd38bc9e8 Move some more commands to GPUCommonHW. Get rid of ugly cast. 2023-02-25 19:23:07 +01:00
Henrik Rydgård d22a22569a Move the drawing commands to GPUCommonHW 2023-02-25 19:23:07 +01:00
Henrik Rydgård 8fb75e0c12 Unify most of the DebugGetShader* functions 2023-02-25 16:42:09 +01:00
Henrik Rydgård 7bcc21b0e3 Move msaaLevel_ to GPUCommonHW 2023-02-25 16:27:00 +01:00
Henrik Rydgård 8b54a14bf2 Move the big command table to where it belongs, GPUCommonHW 2023-02-25 16:20:34 +01:00
Henrik Rydgård 9d6c3c329e Move CheckGPUFeatures() to GPUCommonHW 2023-02-25 16:13:54 +01:00
Henrik Rydgård 8ba665e258 More unification work 2023-02-25 16:12:24 +01:00
Henrik Rydgård e136ad795a Some slight unification 2023-02-25 15:15:34 +01:00
Henrik Rydgård 9e8f1d3cb3 Make the DoState stuff less ugly 2023-02-25 14:42:15 +01:00
Henrik Rydgård 285ffbaa52 Unify CopyDisplayToOutput 2023-02-25 14:42:15 +01:00
Henrik Rydgård 18999c3687 Create the GPUCommonHW class. 2023-02-25 14:42:10 +01:00