aboutsummaryrefslogtreecommitdiff
path: root/plugins/gpu_neon
diff options
context:
space:
mode:
authornotaz2011-12-06 11:16:40 +0200
committernotaz2011-12-06 11:16:40 +0200
commita3a9f519f75d195891d466f77ceb43f90e24f713 (patch)
treef778a755d98bb3c4431f69a52cd845ab79e90a83 /plugins/gpu_neon
parent9b4bd105989e1186ca09d93e70d14484a528a238 (diff)
downloadpcsx_rearmed-a3a9f519f75d195891d466f77ceb43f90e24f713.tar.gz
pcsx_rearmed-a3a9f519f75d195891d466f77ceb43f90e24f713.tar.bz2
pcsx_rearmed-a3a9f519f75d195891d466f77ceb43f90e24f713.zip
gpu_neon: keep texture bits in sync
ex_regs must be updated as they are saved and sent to GPU on frameskip
Diffstat (limited to 'plugins/gpu_neon')
-rw-r--r--plugins/gpu_neon/gpu.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/plugins/gpu_neon/gpu.c b/plugins/gpu_neon/gpu.c
index 7f5a8a9..a5d0b87 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;