mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-15 10:40:01 +01:00
Add mitigation for games like GTA that never call sceDisplaySetFramebuf
This commit is contained in:
1 parent
c1ac860523
commit
c8f2f182d2
1 file changed
+7
@@ -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;
|
||||
@@ -193,6 +194,7 @@ void __DisplayInit() {
|
||||
numSkippedFrames = 0;
|
||||
numVBlanks = 0;
|
||||
numVBlanksSinceFlip = 0;
|
||||
flippedThisFrame = false;
|
||||
framebufIsLatched = false;
|
||||
framebuf.topaddr = 0x04000000;
|
||||
framebuf.fmt = GE_FORMAT_8888;
|
||||
@@ -656,10 +658,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.
|
||||
@@ -749,6 +755,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);
|
||||
|
||||
|
||||
Reference in new issue
Block a user