Skip to content

[List] Games that break when threaded VDP1 rendering is enabled #233

@StrikerX3

Description

@StrikerX3

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:

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    accuracyAccuracy improvements or problemsemu-coreEmulator corefreezeGames that freeze or softlockgraphicsGraphics issues or enhancementshelp wantedExtra attention is neededno-bootGames that don't boot

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions