From d3db5653442cd391016b56140840dc1279da5c89 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 29 Nov 2018 19:28:10 -0800 Subject: [PATCH] GPU: Maintain a bit more state in inner-prim loop. Trying to make dumps properly trigger this optimization, but they still sometimes get flattened and don't. --- GPU/GPUCommon.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index dc53f28cdd..2030f23f01 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -1627,8 +1627,13 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { break; } case GE_CMD_VADDR: + gstate.cmdmem[data >> 24] = data; gstate_c.vertexAddr = gstate_c.getRelativeAddress(data & 0x00FFFFFF); break; + case GE_CMD_IADDR: + gstate.cmdmem[data >> 24] = data; + gstate_c.indexAddr = gstate_c.getRelativeAddress(data & 0x00FFFFFF); + break; case GE_CMD_OFFSETADDR: gstate.cmdmem[GE_CMD_OFFSETADDR] = data; gstate_c.offsetAddr = data << 8; @@ -1646,8 +1651,10 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { // flip face by indices for triangles cullMode = data & 1; break; + case GE_CMD_TEXFLUSH: case GE_CMD_NOP: case GE_CMD_NOP_FF: + gstate.cmdmem[data >> 24] = data; break; case GE_CMD_BONEMATRIXNUMBER: gstate.cmdmem[GE_CMD_BONEMATRIXNUMBER] = data; @@ -1690,6 +1697,12 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { break; } + case GE_CMD_TEXBUFWIDTH0: + case GE_CMD_TEXADDR0: + if (data != gstate.cmdmem[data >> 24]) + goto bail; + break; + default: // All other commands might need a flush or something, stop this inner loop. goto bail;