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 {