From a3a9f519f75d195891d466f77ceb43f90e24f713 Mon Sep 17 00:00:00 2001
From: notaz <notasas@gmail.com>
Date: Tue, 6 Dec 2011 11:16:40 +0200
Subject: [PATCH] gpu_neon: keep texture bits in sync

ex_regs must be updated as they are saved and sent to GPU
on frameskip
---
 plugins/gpu_neon/gpu.c | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/plugins/gpu_neon/gpu.c b/plugins/gpu_neon/gpu.c
index 7f5a8a92..a5d0b876 100644
--- a/plugins/gpu_neon/gpu.c
+++ b/plugins/gpu_neon/gpu.c
@@ -283,24 +283,13 @@ static int check_cmd(uint32_t *data, int count)
       //printf("  %3d: %02x %d\n", pos, cmd, len);
       if ((cmd & 0xf4) == 0x24) {
         // flat textured prim
-        gpu.status.reg &= ~0x1ff;
-        gpu.status.reg |= list[4] & 0x1ff;
+        gpu.ex_regs[1] &= ~0x1ff;
+        gpu.ex_regs[1] |= list[4] & 0x1ff;
       }
       else if ((cmd & 0xf4) == 0x34) {
         // shaded textured prim
-        gpu.status.reg &= ~0x1ff;
-        gpu.status.reg |= list[5] & 0x1ff;
-      }
-      else switch (cmd)
-      {
-        case 0xe1:
-          gpu.status.reg &= ~0x7ff;
-          gpu.status.reg |= list[0] & 0x7ff;
-          break;
-        case 0xe6:
-          gpu.status.reg &= ~0x1800;
-          gpu.status.reg |= (list[0] & 3) << 11;
-          break;
+        gpu.ex_regs[1] &= ~0x1ff;
+        gpu.ex_regs[1] |= list[5] & 0x1ff;
       }
       if (2 <= cmd && cmd < 0xc0)
         vram_dirty = 1;
@@ -331,6 +320,10 @@ static int check_cmd(uint32_t *data, int count)
       break;
   }
 
+  gpu.status.reg &= ~0x1fff;
+  gpu.status.reg |= gpu.ex_regs[1] & 0x7ff;
+  gpu.status.reg |= (gpu.ex_regs[6] & 3) << 11;
+
   if (gpu.frameskip.active)
     renderer_sync_ecmds(gpu.ex_regs);
   gpu.state.fb_dirty |= vram_dirty;
-- 
2.39.5