mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Add mitigation for games like GTA that never call sceDisplaySetFramebuf
This commit is contained in:
parent
522de63eed
commit
4c720631c1
1 changed files with 7 additions and 0 deletions
|
@ -106,6 +106,7 @@ static int mode;
|
|||
static int width;
|
||||
static int height;
|
||||
static bool wasPaused;
|
||||
static bool flippedThisFrame;
|
||||
|
||||
// 1.001f to compensate for the classic 59.94 NTSC framerate that the PSP seems to have.
|
||||
static const double timePerVblank = 1.001f / 60.0f;
|
||||
|
@ -194,6 +195,7 @@ void __DisplayInit() {
|
|||
numSkippedFrames = 0;
|
||||
numVBlanks = 0;
|
||||
numVBlanksSinceFlip = 0;
|
||||
flippedThisFrame = false;
|
||||
framebufIsLatched = false;
|
||||
framebuf.topaddr = 0x04000000;
|
||||
framebuf.fmt = GE_FORMAT_8888;
|
||||
|
@ -658,10 +660,14 @@ void hleEnterVblank(u64 userdata, int cyclesLate) {
|
|||
framebufIsLatched = false;
|
||||
gpu->SetDisplayFramebuffer(framebuf.topaddr, framebuf.stride, framebuf.fmt);
|
||||
__DisplayFlip(cyclesLate);
|
||||
} else if (!flippedThisFrame) {
|
||||
// Gotta flip even if sceDisplaySetFramebuf was not called.
|
||||
__DisplayFlip(cyclesLate);
|
||||
}
|
||||
}
|
||||
|
||||
void __DisplayFlip(int cyclesLate) {
|
||||
flippedThisFrame = true;
|
||||
// We flip only if the framebuffer was dirty. This eliminates flicker when using
|
||||
// non-buffered rendering. The interaction with frame skipping seems to need
|
||||
// some work.
|
||||
|
@ -751,6 +757,7 @@ void hleAfterFlip(u64 userdata, int cyclesLate) {
|
|||
|
||||
void hleLeaveVblank(u64 userdata, int cyclesLate) {
|
||||
isVblank = 0;
|
||||
flippedThisFrame = false;
|
||||
VERBOSE_LOG(SCEDISPLAY,"Leave VBlank %i", (int)userdata - 1);
|
||||
CoreTiming::ScheduleEvent(msToCycles(frameMs - vblankMs) - cyclesLate, enterVblankEvent, userdata);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue