-
-
Notifications
You must be signed in to change notification settings - Fork 38
Description
This issue has been opened in response to many problems people have encountered that are caused by running the VDP1 renderer in a thread.
The gist of the issue is that the VDP1 Sprite Draw End interrupt is triggered far too late (once per scanline) when running in the renderer thread. Running it on the emulator thread (i.e. with the threaded VDP1 or VDP2 renderer options disabled) fixes this issue and causes the interrupt to trigger much more quickly, which seems to solve problems on some games.
I'm not sure there's an easy/cheap solution to this other than giving users an option to move VDP1 rendering to the emulator thread. This is because in order to know when to trigger the interrupt, the program needs to run through the entire command table until it finds the program termination, and if exact timings are to be implemented, every drawn pixel also needs to be counted, so at that point it's easier to just render VDP1 on the emulator thread instead of coming up with some (likely expensive) thread synchronization magic.
So far, Cyberbots (#205) and Grandia (#91) seem to be affected by this as well as celeriyacon's SCU test ROM.
Make sure to include the game's hash when reporting these issues. You can find it by going to System > System state and clicking the Copy button next to the Hash: under the CD drive section:
