mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-14 15:00:30 +02:00
GE dump playback: Ignore a second INIT in a dump
Before 71210f3fa2, a second dump request during a recording started it again, writing another
INIT (and initial CLUT) into the dump: the GE state of that moment, which already includes the
register writes the dump only has after it. Playback applied it, so the last draws ran with the
wrong state: GOD EATER BURST (13950) and GOD EATER 2 (6343) came out black and Street Riders
(14746) garbled. The recorder only writes an INIT when it starts, so skip any later one. The 15
such dumps in the GitHub issue set now match the PSP's replay, 10 of them exactly.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
a418514376
commit
eb59b00a37
1 file changed
+9
@@ -1037,6 +1037,15 @@ ReplayResult DumpExecute::Run() {
|
||||
}
|
||||
|
||||
const Command &cmd = commands_[i];
|
||||
// Only the first INIT is real. Before 71210f3fa2 a second dump request during a recording started
|
||||
// it again, writing another INIT (and initial CLUT) into the dump: the GE state of that moment,
|
||||
// which already includes register writes the dump only has after it. Applied, it ran the last
|
||||
// draws with the wrong state (GOD EATER BURST 13950 came out black, Street Riders 14746 garbled).
|
||||
if (cmd.type == CommandType::INIT && i != 0) {
|
||||
if (i + 1 < commands_.size() && commands_[i + 1].type == CommandType::CLUT)
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
switch (cmd.type) {
|
||||
case CommandType::INIT:
|
||||
Init(cmd.ptr, cmd.sz);
|
||||
|
||||
Reference in new issue
Block a user