版本
3.5-2305
分支
dc-netplay
发布于
11 years, 1 month ago
Windows x64 Windows x86 Mac OS X Android
提交(Commit)
0841ebcdb2d26b92c98dc49cafb8088d325a8d0d
修改者
comex
修改说明
Add a supposedly deterministic dual-core VideoCommon option, bSyncGPUAtIdleOnly.

Basically, the GPU thread continues to start working as soon as the
fifo is populated, but instead of indicating completion (via
ScheduleEvent_Threadsafe and atomic variables) and causing an
interrupt as soon as it's actually done, it sets a flag which the CPU
thread handles at certain points - generally on idle (so idle skipping
is required).  This involves separating CommandProcessor::fifo into a
CPU and GPU version (only when the option is on), and copying the
former to the latter on SyncGPU().

In theory, this should only desync if the CPU inspects an EFB copy or
whatever before getting the interrupt, which should not happen.  There
are probably bugs in this implementation though.

In Melee this does not seem to hurt performance compared to normal
dual core.

Todo:
- see if it actually works
- expose this option (currently stuck on)
- do something if dual core or idle skipping are off
- turn FORCE_WHINE_ABOUT_THREADSAFE off