From: notaz <notasas@gmail.com>
Date: Fri, 22 Mar 2024 22:57:41 +0000 (+0200)
Subject: gpulib: fix frameskip on weird lists
X-Git-Tag: r25~197
X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8295d332b43963ebba54f3ad74388aaaeb11a789;p=pcsx_rearmed.git

gpulib: fix frameskip on weird lists

notaz/pcsx_rearmed#337
---

diff --git a/plugins/gpulib/gpu.c b/plugins/gpulib/gpu.c
index f2bf6ce9..b444dcf5 100644
--- a/plugins/gpulib/gpu.c
+++ b/plugins/gpulib/gpu.c
@@ -532,6 +532,10 @@ static noinline int do_cmd_list_skip(uint32_t *data, int count, int *last_cmd)
     uint32_t *list = data + pos;
     cmd = LE32TOH(list[0]) >> 24;
     len = 1 + cmd_lengths[cmd];
+    if (pos + len > count) {
+      cmd = -1;
+      break; // incomplete cmd
+    }
 
     switch (cmd) {
       case 0x02:
@@ -571,11 +575,6 @@ static noinline int do_cmd_list_skip(uint32_t *data, int count, int *last_cmd)
           gpu.ex_regs[cmd & 7] = LE32TOH(list[0]);
         break;
     }
-
-    if (pos + len > count) {
-      cmd = -1;
-      break; // incomplete cmd
-    }
     if (0x80 <= cmd && cmd <= 0xdf)
       break; // image i/o