So I found about two hacks that get rid of the tearing problems. Both of them however kill performance in some games; most notably Shantae, which runs between 45 and 56 fps, but also BADAPPLE.gbc but not when it's loaded as the first rom after bootup... strange.
The simpler of the two is to simply add a call to gfxFlushBuffers() before the call to gspWaitForVblank() in system_waitForVBlank()
like so:
Code:
void system_waitForVBlank() {
gfxFlushBuffers();
gspWaitForVBlank();
}
I also removed the gfxFlushBuffers() call from system_checkPolls() since it now seemed superfluous, but from what I can tell the presence/absence of this call doesn't seem to affect much.
I don't know whether this way of fixing this is a good idea (thus I call it a hack), I know little about the internals of GameYob, but the tearing looked very much like some flushing/waitForVBlank issue so on the attack I went.
EDIT:
The other hack, for posterity, was even more of a hack. It amounted to removing the call to gspWaitForVblank() from system_waitForVBlank(), essentially rendereing this an empty do-nothing function, and inserting it after the gfxSwapBuffers() call in gfxMySwapBuffers() instead. In this case I left the gfxFlushBuffers() call in system_checkPolls() alone.
EDIT2:
Noticing slowdowns in Kirbys Dreamland 2 too. More so for the first described method than the latter.