mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-14 23:10:33 +02:00
God of War draws thousands of short strips per frame, each continuing the previous one's vertices with nothing changed in between. At the first draw of such a run, SoftGPU now looks ahead in the display list for the draws that follow it, past only commands that can't change anything (NOPs, unchanged state, VADDR to where the vertices continue), and the transform unit decodes the whole run at once and then skins and transforms it in chunks that two helper threads take alongside the emulation thread. The draws then read their vertices from that, and the UV and normal they carry to the next draw are updated as reading their last vertex would. The helpers wait a moment for the next run before their tasks end, as the drawing threads do: waking them costs the emulation thread a system call. The thresholds were picked under WSL2, where that costs more than on bare metal, so they're worth measuring again there. God of War takes 4.2 s for five emulated seconds (from 4.5 s). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>