diff options
author | notaz | 2011-08-12 02:37:23 +0300 |
---|---|---|
committer | notaz | 2011-08-13 00:56:40 +0300 |
commit | c006d9e3d7b4c7f0fda6c27062e362cfc7515630 (patch) | |
tree | aa9054fec960971128bd1cb185d324f8750084c9 | |
parent | 1db5bc1ed7f992d7c2686f5359e53301eba2b2ca (diff) | |
download | pcsx_rearmed-c006d9e3d7b4c7f0fda6c27062e362cfc7515630.tar.gz pcsx_rearmed-c006d9e3d7b4c7f0fda6c27062e362cfc7515630.tar.bz2 pcsx_rearmed-c006d9e3d7b4c7f0fda6c27062e362cfc7515630.zip |
gpu_unai: redo frameskip
the previous code wasn't that functional
-rw-r--r-- | plugins/gpu_unai/gpu.cpp | 21 | ||||
-rw-r--r-- | plugins/gpu_unai/gpu_command.h | 8 |
2 files changed, 19 insertions, 10 deletions
diff --git a/plugins/gpu_unai/gpu.cpp b/plugins/gpu_unai/gpu.cpp index ea98364..fefc277 100644 --- a/plugins/gpu_unai/gpu.cpp +++ b/plugins/gpu_unai/gpu.cpp @@ -29,6 +29,7 @@ int linesInterlace = 0; /* internal lines interlace */ int linesInterlace_user = 0; /* Lines interlace */ bool isSkip = false; /* skip frame (info coming from GPU) */ +bool wasSkip = false; bool skipFrame = false; /* skip frame (according to frame skip) */ bool alt_fps = false; /* Alternative FPS algorithm */ bool show_fps = false; /* Show FPS statistics */ @@ -551,6 +552,11 @@ void GPU_writeStatus(u32 data) DisplayArea[0] = (data & 0x000003FF); //(short)(data & 0x3ff); DisplayArea[1] = ((data & 0x0007FC00)>>10); //(data & 0x000FFC00) >> 10; //(short)((data>>10)&0x1ff); fb_dirty = true; + wasSkip = isSkip; + if (isSkip) + isSkip = false; + else + isSkip = skipFrame; break; case 0x07: DisplayArea[4] = data & 0x000003FF; //(short)(data & 0x3ff); @@ -884,15 +890,18 @@ void GPU_updateLace(void) if (!fb_dirty || (GPU_GP1&0x08800000)) return; - if (!isSkip) { + if (!wasSkip) { blit(); - fb_dirty = false; - if (cbs->fskip_advice) - isSkip = true; + skCount = 0; } - else - isSkip = false; + else { + skCount++; + if (skCount >= 8) + wasSkip = isSkip = 0; + } + + skipFrame = cbs->fskip_advice; } long GPUopen(unsigned long *, char *, char *) diff --git a/plugins/gpu_unai/gpu_command.h b/plugins/gpu_unai/gpu_command.h index 2dc7f5b..a5b61b6 100644 --- a/plugins/gpu_unai/gpu_command.h +++ b/plugins/gpu_unai/gpu_command.h @@ -400,7 +400,7 @@ void gpuSendPacketFunction(const int PRIM) TextureWindow[2] = TextureMask[(temp >> 0) & 0x1F]; TextureWindow[3] = TextureMask[(temp >> 5) & 0x1F]; gpuSetTexture(GPU_GP1); - isSkip = false; + //isSkip = false; DO_LOG(("TextureWindow(0x%x)\n",PRIM)); } break; @@ -409,7 +409,7 @@ void gpuSendPacketFunction(const int PRIM) const u32 temp = PacketBuffer.U4[0]; DrawingArea[0] = temp & 0x3FF; DrawingArea[1] = (temp >> 10) & 0x3FF; - isSkip = false; + //isSkip = false; DO_LOG(("DrawingArea_Pos(0x%x)\n",PRIM)); } break; @@ -418,7 +418,7 @@ void gpuSendPacketFunction(const int PRIM) const u32 temp = PacketBuffer.U4[0]; DrawingArea[2] = (temp & 0x3FF) + 1; DrawingArea[3] = ((temp >> 10) & 0x3FF) + 1; - isSkip = false; + //isSkip = false; DO_LOG(("DrawingArea_Size(0x%x)\n",PRIM)); } break; @@ -427,7 +427,7 @@ void gpuSendPacketFunction(const int PRIM) const u32 temp = PacketBuffer.U4[0]; DrawingOffset[0] = ((long)temp<<(32-11))>>(32-11); DrawingOffset[1] = ((long)temp<<(32-22))>>(32-11); - isSkip = false; + //isSkip = false; DO_LOG(("DrawingOffset(0x%x)\n",PRIM)); } break; |