gpulib: fix frameskip on weird lists
authornotaz <notasas@gmail.com>
Fri, 22 Mar 2024 22:57:41 +0000 (00:57 +0200)
committernotaz <notasas@gmail.com>
Fri, 22 Mar 2024 23:44:02 +0000 (01:44 +0200)
notaz/pcsx_rearmed#337

plugins/gpulib/gpu.c

index c0603e0..289e286 100644 (file)
@@ -576,6 +576,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:
@@ -615,11 +619,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