From 2e2fa532012d640b793bffc3408beb5d1b2da40e Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 21 Sep 2013 20:47:35 -0700 Subject: [PATCH] Preseve offsetAddr on stall, instead of reset to 0. Only for new lists is it reset to 0, afaict. --- GPU/GPUCommon.cpp | 8 ++++---- GPU/GPUInterface.h | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 7d246711d5..266b817bcd 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -263,6 +263,7 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, PSPPointercontext.IsValid()) dl.context = args->context; else @@ -467,10 +468,7 @@ bool GPUCommon::InterpretList(DisplayList &list) { } list.started = true; - // I don't know if this is the correct place to zero this, but something - // need to do it. See Sol Trigger title screen. - // TODO: Maybe this is per list? Should a stalled list remember the old value? - gstate_c.offsetAddr = 0; + gstate_c.offsetAddr = list.offsetAddr; if (!Memory::IsValidAddress(list.pc)) { ERROR_LOG_REPORT(G3D, "DL PC = %08x WTF!!!!", list.pc); @@ -525,6 +523,8 @@ bool GPUCommon::InterpretList(DisplayList &list) { UpdatePC(list.pc - 4, list.pc); } + list.offsetAddr = gstate_c.offsetAddr; + if (g_Config.bShowDebugStats) { time_update(); gpuStats.msProcessingDisplayLists += time_now_d() - start; diff --git a/GPU/GPUInterface.h b/GPU/GPUInterface.h index 49cebe2f1e..fe44b8aa25 100644 --- a/GPU/GPUInterface.h +++ b/GPU/GPUInterface.h @@ -134,6 +134,7 @@ struct DisplayList bool pendingInterrupt; bool started; u32_le *context; + u32 offsetAddr; }; enum GPUInvalidationType {